硬件加速绘制基础知识

目录

前置知识:

OPENGL 和OPENGL ELS的关系

EGLSurface和EGLContext关系

上下文保存着状态集,什么是状态集?

Thread和EGLSurface,EGLContext关系

具体api

Display和EGL关系

Surface和EGLSurface的关系

大致初始化流程

绘制过程

参考文章


前置知识:

OPENGL 和OPENGL ELS的关系

OPENGL 是统一不同厂商GPU绘制的接口,通过GPU的计算得到一张图片(内存中的一块Buffer保存着信息)

openGl是一个操作GPU的接口,但是具体的图片信息需要一块窗口来呈现出来,这个窗口就是OPENGL EGL

OPENGL EGL是OpenGl 和Native底层之间的视图接口。EGL可以获取手机配置(会根据不同Display屏幕的情况创建EGLConfig)创建出一个surface(默认BufferQuene的大小是屏幕分辨率乘以像素个数)和用于存放OPEGL状态集(OPENGL信息是传入的图元,顶点等信息,OPENGL状态是如何进行测试混合片段阶段的处理)的context。OPENGL生成图片数据(具体流程见图形学的图元处理部分,其完全由GPU处理)后保存到EGL创建的surface的buffer中,通过EGL的接口显示到窗口上

一句话总结:EGL获取Buffer用于和屏幕打交道,buffer的具体图像数据由OpenGl往里面填充

EGLSurface和EGLContext关系

EGLSurface:EGL 是用于在Surface绘制buffer 提供给 OpenGL ES 进行绘制的

EGLContext: EGL 还会根据格式生成一块 context,context 也是一块 buffer用于保存OpenGl的状态集

上下文保存着状态集,什么是状态集?

这些状态变量描述当前OpenGl应该如何运行,比如是绘制线段还是三角形,可以 通过改变上下文状态来改变OpenGl的绘制行为。

状态设置函数就是用来改变上下文的,而OpenGl是根据上下文进行渲染的。

surface 需要与 context 进行搭配使用, context 中是可以保存 OpenGL ES 状态集信息的,所以 context 就可以使用自己内部保存的信息往 surface 上进行绘制

Thread和EGLSurface,EGLContext关系

由于存在多个EGLSurface和多个Context,但是一个进程同一时间只能启动有相同格式的一块 surface 和一块对应于 OpenGL ES 的 context,一块 context 同时也只能被一个进程启动。,有时候也会设计到多线程操作,每个 thread 可以拥有自己的 surface 和 context,但是也要满足刚才的限制 : 一个 thread 同一时间只能启动有相同格式的 一块 surface 和一块对应于 OpenGL ES 的 context,一块 context 同时也只能被一 个 thread 启动,所以我们需要设置绑定这个Thread对应渲染的surface和context

具体api

通过eglMakeCurrent可以切换当前线程绑定的surface和context,接着通过OPENGL的接口设置context的状态,使用context的状态对surface进行绘制, 由于Surface是双缓冲,所以准备好数据之后需要调用egl的swapBuffer置换缓存,让Opengl去渲染,自己在继续生成下一个buffer的数据

Display和EGL关系

EGL有很多版本,不同设备也有多个Display通过displayID去区分(典型的场景是车机上的多联屏);不同的Display支持的版本不同其屏幕配置也可能不同这些通过eglgetConfig API 获取该块屏幕的配置信息,所以EGL初始化的过程和使用的过程需要指定对应的Display,初始化过程根据支持的opengl的版本初始化不同版本的opengl。使用过程比如创建EGLSurface和EGLContext需要指定display

Surface和EGLSurface的关系

Surface没有直接和OPENGL操作的接口其是一个承载的窗口,需要通过EGLSurface和Opengl对接绘制添加EGL的功能支持

大致初始化流程

经过上面的描述,来总结下大致流程:

  • 获取EGLDisplay
  • EGLDisplay初始化,通过Display获取EGLConfig
  • 根据Config信息初始化所支持的OPENGL版本
  • EGL环境初始化结束,接下来通过EGL获取EGLSurface和对应的EGLContext
  • 设置当前线程绑定的EGLSurface和EGLContext(与线程绑定)

绘制过程

对这篇文章又有了新的理解,可以翻看,下文过程中也会进行对应颜色区间的补充说明 使用 GPU 渲染模式分析工具进行分析

  • perfromTravle中申请内存,其实就是Surface的BufferQuene(dequeBuffer设计BufferQuene的生命周期)
  • 递归遍历RenderNode获取所有的DrawOp树,也叫DisplayList
  • 同步Cpu的DisplayList到GPU(对应同步上传,等待CPU将数据同步至GPU;不像软件绘制那样直接使用的匿名共享内存,这部分存在一个时间差,)
  • 转换DrawOp树为对应的glXXX函数,将命令同步至GPU,让GPU绘制(对应于向OpenGl发起渲染流程
  • swapBuffer提交缓冲区并申请下一块Buffer(对应于交换缓冲区依赖于GPU提交的数据如果SF对应合成的数据还没有渲染好则会阻塞等待GPU渲染完成),异步请求SF进行合成。

只有EGL才可以对接屏幕显示,OPENGL只是操作GOU进行绘制图像)

参考文章

 OPENGL ES 2.0 知识串讲(2)――EGL详解

OpenGL ES: (3) EGL、EGL绘图的基本步骤、EGLSurface、ANativeWindow 

创建2个egl

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/120940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

以技术创新“谋局”,洗碗机市场的风向变了

在知乎、小红书等知识社区上,时常可以看到一些有趣的“种草”帖:扫地机器人和洗碗机,被并称为“解放人类双手的家电产品”。 特别是洗碗机的话题下,不少对清洁、节能、烘干、容量等卖点进行详尽阐述的科普文章,动辄就…

计算机网络——理论知识总结(上)

开新番,因为博主备考的学校计网只考察1/6的分值,而且定位偏向于送分题,因此在备考时并没有很高强度的复习。本帖基于王道考研的教辅总结归纳,虽然是408的教材,但忽略其中有难度的部分,如计算题、画图题等&a…

如何通过员工工时管理降低企业成本?

作为当今快节奏商业环境的领导者或管理者,掌握员工的工作时间对于控制企业成本和确保每个人都各尽其责至关重要。 员工工时表软件就是这样一款工时跟踪管理解决方案:数字化的工时表有助于保护企业的财务不会被无节制的开支冲垮。然而,引入此…

【信创】银河麒麟V10 安装postgis

安装postGis步骤 1、安装 proj4 #tar -zxvf proj-4.8.0.tar.gz #cd proj-4.8.0 #mkdir -p /opt/proj-4.8.0 #./configure --prefix=/opt/proj-4.8.0 #make && make install #vi /etc/ld.so.conf.d/proj-4.8.0.conf #ldconfig 2、安装 geos #tar -xjf geos-3.6.1.tar.b…

Spark SQL概述与基本操作

目录 一、Spark SQL概述 (1)概念 (2)特点 (3)Spark SQL与Hive异同 (4)Spark的数据抽象 二、Spark Session对象执行环境构建 (1)Spark Session对象 (2)代码演…

hive使用中的参数优化与问题排查

1.使用hive的虚拟列排查错误案例 set hive.exec.rowoffsettrue; SELECT –输入文件名 INPUT__FILE__NAME, –文件中的块内偏移量 BLOCK__OFFSET__INSIDE__FILE, –文件行偏移量 ROW__OFFSET__INSIDE__BLOCK, * from hdp_lbg_zhaopin_defaultdb.zzdetail where dt‘20201117’…

07-定位布局

定位布局 1.定位布局- 定位流分类1.1.静态定位1.2.相对定位1.3.绝对定位1.4.固定定位1.5.粘滞定位1.6.z-index - 1.1.静态定位( Static positioning)- 1.2.什么是相对定位?( Relative positioning )- 相对定位注意点- 相对定位应…

Flink on yarn 加载失败plugins失效问题解决

Flink on yarn 加载失败plugins失效问题解决 flink版本:1.13.6 1. 问题 flink 任务运行在yarn集群,plugins加载失效,导致通过扩展资源获取任务参数失效 2. 问题定位 yarn容器的jar包及插件信息,jar包是正常上传 源码定位 加载plugins入口,TaskMana…

Unity的屏幕坐标获取

Screen.width public static int width ; 描述 屏幕窗口的当前宽度(以像素为单位)(只读)。 此为玩家窗口的实际宽度(在全屏模式下,它也是当前分辨率)。 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Example : Mo…

TCP三次握手具体过程

四次挥手 1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN1,其序列号为sequ(等于前已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN_WAIT_1&#xff08…

【Python机器学习】零基础掌握RandomTreesEmbedding集成学习

如何在高维数据中找到隐藏的结构? 面临大量复杂、高维的数据,例如社交网络分析、电子商务推荐系统或医疗诊断,如何有效地分析和解读这些数据成为一大挑战。一个有效的方法是使用嵌入技术将高维数据转化为低维形式,同时保留其内在结构。这次将介绍一种称为“随机树嵌入”(…

AI新能量!FortiGate NGFW面向数据中心全面集成FortiGuard AI 安全服务

企业IT技术正在以惊人的速度发展,转型最大的领域之一是下一代防火墙(NGFW)市场。如今,混合云、多云、边缘等多种基础设施形态共存,已经成为大部分企业的常态,不断扩张的攻击面需要不同形态防火墙的安全防护…

若依ruoyi-nbcio如何做一个仿钉钉流程设计器的思考

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 看到有些流程图采用仿钉钉的流程设计,比如下面界面: 这种方式虽然简单&#xff0c…

kafka安装配置

Kafka的安装配置可以按照以下步骤进行: 确保已安装Java运行环境:Kafka是使用Java语言编写的,因此需要在安装Kafka之前先安装Java运行环境。Kafka支持Java 8及以上版本。硬件要求:Kafka可以在任何硬件上运行,但是在生产…

计算机网络文章荟萃

脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?-网络编程/专项技术区 - 即时通讯开发者社区! 1.什么是 socket - 掘金2.socket 的实现原理 - 掘金本文讲述了 socket 在 linux 操作系统下的数据结构,以及阻塞 IO 利用…

【Java】PAT Basic Level 1023 组个最小数

题目 1024 组个最小数 作者 CAO, Peng 单位 Google 给定数字 0-9 各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意 0 不能做首位)。例如:给定两个 0,两个 1&#xff…

檢測項目簡體字

某些項目可能要求代碼中不允許使用簡體字 安裝stcheck檢查 yarn add stcheck --dev在項目根目錄創建 st.config.json 文件 {"patterns": ["./**/*.(ts|js|tsx|jsx|vue|html)","!**/node_modules/**","!.git/**"],"gitignore&q…

Express框架开发接口之登录与注册API

我们利用nodeexpressmysql开发接口,对数据库数据进行简单增、删、查改等操作。 接口是什么? 接口是 前后端通信的桥梁 简单理解:一个接口就是 服务中的一个路由规则 ,根据请求响应结果 接口的英文单词是 API (Application Progra…

【socket】网卡内部缓冲区、socket缓冲区、滑动窗口

一、网卡内部缓冲区 网卡内部的缓冲区,通常称为环形缓冲区(Ring Buffer)。环形缓冲区是一种用于数据存储和数据传输的结构,它允许数据在网络接口卡(网卡)和计算机操作系统之间进行高效传输。 当网卡接收到…

Java工具库——FastJson的40个常用方法

那些想看却没看的书,在心里摆满一个图书馆… 工具库介绍 阿里巴巴的 FastJSON,也被称为 Alibaba FastJSON 或阿里巴巴 JSON,是一个高性能的 Java JSON 处理库,用于在 Java 应用程序中解析和生成 JSON 数据。FastJSON 以其卓越的性…