当前位置:网站首页>OpenGL ES: (2) OpenGL ES 与 EGL、GLSL的关系
OpenGL ES: (2) OpenGL ES 与 EGL、GLSL的关系
2022-07-01 05:42:00 【萧戈】
OpenGL ES 是负责 GPU 工作的,目的是通过 GPU 计算,得到一张图片,这张图片在内存中其实就是一块 buffer,存储有每个点的颜色信息等。而这张图片最终是要显示到屏幕上,所以还需要具体的窗口系统来操作,OpenGL ES 并没有相关的函数。所以,OpenGL ES 有一个好搭档 EGL。
EGL,全称:embedded Graphic Interface,是 OpenGL ES 和底层 Native 平台 视窗系统之间的接口。所以大概流程是这样的:首先,通过 EGL 获取到手机屏幕 的 handle,获取到手机支持的配置(RGBA8888/RGB565 之类,表示每个像素中包 含的颜色等信息的存储空间是多少位),然后根据这个配置创建一块包含默认 buffer 的 surface(buffer 的大小是根据屏幕分辨率乘以每个像素信息所占大小计 算而得)和用于存放 OpenGL ES 状态集的 context,并将它们 enable 起来。然后, 通过 OpenGL ES 操作 GPU 进行计算,将计算的结果保存在 surface 的 buffer 中。 最后,使用 EGL,将绘制的图片显示到手机屏幕上。
而在 OpenGL ES 操作 GPU 计算的时候,还需要介绍 OpenGL ES 的另外一个好搭档 GLSL。
GLSL,全称:OpenGL Shading Language,是 OpenGL ES 中使用到的着色器的 语言,用这个语言可以编写小程序运行在 GPU 上。
在这里需要先提到 CPU 和 GPU 的区别,它们的功能都是用于计算,也都是由很多核组成,区别在于 CPU 的核比较少,但是单个核的计算能力比较强,而 GPU 的核很多,但是每个核的计算能力都不算特别强。目前 GPU 的主要工作是用于生成图片(现在也有通过 GPU 进行高性能运算_并行运算,但是在这里不属于讨论的范围),原因就是图片是由很多像素组成,每个像素都包含有颜色、深度等信息,而为了得到这些信息数据,针对每个像素点的计算,是可以通过统一的算法来完成。GPU 就擅长处理针对这种大规模数据,使用同一个算法进行计算。而这个算法,就是使用 GLSL 写成 Shader,供 GPU 运算使用。
在图形学的视角中,所有的图片都是由三角形构成的。所以通过 OpenGL ES 绘制图片的时候,我们需要通过 OpenGL ES API 创建用于在 GPU 上运行的 shader, 然后将通过 CPU 获取到的图片顶点信息,传入 GPU 中的 Shader 中。在 Vertex Shader 中通过矩阵变换,将顶点坐标从模型坐标系转换到世界坐标系,再到观察坐标系,到裁剪坐标系,最后投影到屏幕坐标系中,计算出在屏幕上各个顶点的坐标。然后,通过光栅化,以插值的方法得到所有像素点的信息,并在 Fragment shader 中计算出所有像素点的颜色。最后,通过 OpenGL ES 的 API 设定的状态,将得到的像素信息进行 depth/stencil test、blend,得到最终的图片。
参考链接
边栏推荐
- Crossing sect · paipan + Siyuan notes = private notebook
- π盘,让您电脑变成个人的私有云
- scope 数据导出mat
- Oracle 序列+触发器
- 2022第八届中国国际“互联网+”大学生创新创业大赛产业命题赛道开启报名!
- Data governance: data governance framework (Part I)
- Advanced cross platform application development (II): uni app practice
- 为什么用葫芦儿派盘取代U盘?
- First defined here occurs during QT compilation. Causes and Solutions
- Mongodb學習篇:安裝後的入門第一課
猜你喜欢

2/15 (awk, awk conditions, awk processing design can perform additional tasks, and use awk array +for loop to realize advanced search)

论文学习记录随笔 多标签之GLOCAL

On the first day of the new year, 3000 Apache servers went down

千万不要把笔记视频乱放!
![[QT] QT after addition, subtraction, multiplication and division, two decimal places are reserved](/img/30/c802ae9b65601832bf52e760e9962d.png)
[QT] QT after addition, subtraction, multiplication and division, two decimal places are reserved

Trust guessing numbers game

导数的左右极限和左右导数的辨析

Chip, an empire built on sand!

了解 JVM 中几个相关问题 — JVM 内存布局、类加载机制、垃圾回收

数据库连接池的简单实现
随机推荐
Data governance: data governance framework (Part I)
Don't put your notes and videos everywhere!
Deeply understand the underlying implementation principle of countdownlatch in concurrent programming
Is it safe for a novice to open a securities account?
json数据比较器
OpenGL ES: (1) OpenGL ES的由来 (转)
How to create a progress bar that changes color according to progress
云盘里资料被和谐了,怎么办?
mysql 将毫秒数转为时间字符串
HCM 初学 ( 四 ) - 时间
π盘,让您电脑变成个人的私有云
CentOS 7使用yum安装PHP7.0
How to transmit and share 4GB large files remotely in real time?
Oracle 序列+触发器
Idea start view project port
4GB大文件,如何实时远程传输和共享?
TypeORM 框架
OneFlow源码解析:算子签名的自动推断
喊我们大学生个人云服务特供商
What is the at instruction set often used in the development of IOT devices?