当前位置:网站首页>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,得到最终的图片。
参考链接
边栏推荐
- Orcle创建用户+角色
- boot+jsp的高校社團管理系統(附源碼下載鏈接)
- 数据库连接池的简单实现
- Web Security (x) what is OAuth 2.0?
- Redis database deployment and common commands
- SSM的教务管理系统(免费源码获取)
- Brief description of activation function
- Leetcode top 100 questions 1 Sum of two numbers
- 【QT】qt加减乘除之后,保留小数点后两位
- Chapitre d'apprentissage mongodb: Introduction à la première leçon après l'installation
猜你喜欢

LeetCode 最大矩形,最大正方形系列 84. 85. 221. 1277. 1725. (单调栈,动态规划)

Advanced cross platform application development (II): uni app practice

boot+jsp的高校社團管理系統(附源碼下載鏈接)

从底层结构开始学习FPGA----RAM IP的定制与测试

Redis database deployment and common commands

Ssm+mysql second-hand trading website (thesis + source code access link)

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

excel高级绘图技巧100讲(一)-用甘特图来展示项目进度情况

小程序常用组件小结

Educational administration management system (free source code)
随机推荐
libpng12.so.0: cannot open shared object file: No such file or directory 亲测有效
Printk debugging summary
OpenGL ES: (5) OpenGL的基本概念、OpenGL ES 在屏幕产生图片的过程、OpenGL管线(pipeline)
Multi table operation - foreign key cascade operation
printk 调试总结
JDBC common interview questions
Vscode function annotation / file header annotation shortcut
激活函数简述
Crossing sect · paipan + Siyuan notes = private notebook
Flowable source code comment (XXXIX) task listener
Fiber Bragg grating (FBG) notes [1]: waveguide structure and Bragg wavelength derivation
C语言初阶——牛客网精选好题
Basic electrician knowledge 100 questions
Wild melon or split melon?
论文学习记录随笔 多标签之LSML
Build 2022 上开发者最应关注的七大方向主要技术更新
穿越派·派盘 + 思源笔记 = 私人笔记本
C语言初阶——实现扫雷游戏
基于微信小程序的青少年生理健康知识小助手(免费获取源码+项目介绍+运行介绍+运行截图+论文)
不是你脑子不好用,而是因为你没有找到对的工具