最近在看gles的reference,想多了解一下gles的底层,gles是opengl在khronos在嵌入式设备上的图形硬件的软件访问接口,很多东西和opengl似曾相似,但是和opengl又有很大的不同,最新的标准是gles3.2,标准文档非常长,如果不是写引擎没必要对每个接口烂熟于心,但是为了能够了解他,我对他的编程思想做个总结,最重要的是理解gles的设计思路,然后在使用的时候也必将容易找到相关接口。所以本文基本不会列出gles的每个接口,不会记录讲解每个接口,而是希望能够通过总结gles的设计思想,让我们在开发过程中知道我们应该期待从gles中获得哪个接口。
1.gles是什么
对于程序员开发者:非常简单,他就是一组控制gpu工作指令,所有的指令包括三种:1.描述shader程序,2.给shader设置数据,3.shader之外的绘制状态控制
对于gl的实现者(那些具体为硬件实现gles驱动的厂商要做的):也很简单,控制对gpu的操作(当然也可能有无硬件的软渲染):1.在gpu的显存上存储数据和framebuffer,2.在gpu的处理器上运行可执行的gpu程序。
2.gles 和egl
通常在嵌入式设备上,gles需要和egl协同工作,gles负责图像的绘制,但是对于创建和管理图形context,窗口,同操作系统和其他硬件协作这些需要依靠egl(Embedded-System Graphics Library"),这些不是gles的范围,egl也是一个跨平台的统一的标准,协调多种平台和硬件,具体来说你在手机上创建一个窗口供opengl渲染就需要egl。
3.Data Flow 数据流
这是一个简化版的es3.2的数据流,bufferdata经历顶点,细分,及几何shader 后,进入光栅化