OpenGL-ES 学习(9) ---- OpenGL-ES 简介和基本 Pipeline
目录
- OpenGL-ES 简介
- 渲染管线
- 顶点和顶点着色器
- 图元装配和光栅化
- 片段和片段着色器
- 逐片段操作
- EGL
OpenGL-ES 简介
OpenGL-ES
(OpenGL for Embedded System
)是以手持和嵌入式设备为目标的高级3D图形应用编程接口,OpenGL ES
支持的的平台包括 IOS,Android,BlackBerry,bada,Linux 和 windows,它还是基于浏览器的3D图形Web标准WebGL的基础,OpenGL-ES
标准由 khronos
组织发布
OpenGL-ES
的标准变迁如下:
OpenGL-ES 版本 | 简介 |
---|---|
1.0 | 固定管线 |
1.1 | 固定管线 |
2.0 | 开始支持可编程管线 |
3.0 | 从OpenGL 3.3 标准演化而来 |
渲染管线
OpenGL-ES
的渲染管线如下:
顶点和顶点着色器
顶点和顶点着色器(Vertex
& Vertex Shader
),Shader
是指运行在GPU
可编程管线上的程序,Shader
语言也就是GPU
所用的编程语言,本质是一种类C语言
Vertex Shader
的内容包含:
Shader
程序Shader
的输入属性,就是顶点数组提供的各个顶点的属性uniform
(统一变量) Vertex/Pixel shader 使用的不变的变量- 采样器(
Sampler
)
在图元光栅化阶段,为每个生成的片段计算 Vertex Shader
的输出值,并作为输入值传递给 Fragment Shader
,
用于分配给每个图元顶点的Vertex shader输出每个片段值得机制被称为插值
Vertex Shader
流程框图:
图元装配和光栅化
图元就是基本的图形对象比如三角形,图元的每个顶点被发送到每个Vertex Shader
的不同拷贝,在裁剪之后,被转换为屏幕坐标
光栅化是将图元转换为一组二维片段的过程,此后这些片段就会交给PixelShader
处理,这些二维片段表示屏幕上可以绘制的像素
片段和片段着色器
片段着色器(Pixel Shader
/Fragment Shader
)为片段操作实现了通用的可编程方法,它的组成如下:
Shader
程序- 输入变量:光栅化阶段用插值为每个片段生成的
Vertex Shader
输出 - 输出变量
- 采样器(
Sampler
)
Pixelshader 流程框图:
逐片段操作
OpenGL-ES
逐片段的操作流程如下:
EGL
OpenGL-ES
命令需要存储渲染上下文的状态和绘制表面的支持
- 渲染上下文存储相关的
OpenGL-ES
状态 - 绘制表面是用于绘制图元的表面,它指定渲染所需的缓冲区类型,比如颜色缓冲区,深度缓冲区和模板缓冲区,绘制表面还需要指定所需缓冲区的位深度(本质上对接窗口系统)
因为 OpenGL-ES
没有提及如何常见渲染上下文,或者渲染上下文如何连接到原生窗口系统,EGL
就是 khronos
提出的OpenGL-ES 和原生窗口系统之间的接口;
EGL的功能如下:
- 查询并初始化设备显示商的可用显示设备(获取
eglDsiplay
) - 创建渲染表面
EGL
创建的表面可用分为屏幕上的表面和屏幕外的表面,屏幕上的表面连接到原生窗口系统,屏幕外的表面不显示但是用作渲染表面的像素缓冲区 - 创建渲染上下文(
eglContext
)
EGL 的最新版本时EGL v1.4