GLSL着色器代码分为两个部分,即Vertex Shader(顶点着色器)与Fragment Shader(片元着色器)。
上下文环境搭建
OGL不负责窗口管理与上下文环境管理,该职责由平台完成。在Android平台,该职责由EGL来完成,iOS平台是EAGL完成。
OGL渲染管线分为如下几个阶段:
1. 指定几何对象
glDrawArrays,有三种绘制方式:
GL_POINTS:以点的形式进行绘制,通常用在绘制粒子效果的场景中;
GL_LINES:以线的形式进行绘制,通常用在绘制直线的场景中;
GL_TRIANGLE_STRIP:以三角形的形式进行绘制,所有二维图像的渲染都会使用该方式;
2. 顶点处理(Vertex Shader作用阶段)
根据模型师徒和投影矩阵进行变换来改变顶点的位置,根据纹理坐标与纹理矩阵来改变纹理坐标的位置。这里的输出是以gl_Position来表示具体的顶点位置的,如果是以点(GL_POINTS)来绘制几何图元,那么还应该输出gl_PointSize。
3. 图元组装
顶点将会根据应用程序送往图元的规则(GL_POINTS、GL_TRIANGLES等),将纹理组装成图元。
4. 栅格化操作
由阶段三传递过来的图元数据,在此将会被分解成更小的单元并对应于振缓冲区的各个像素。这些单元成为片元,一个片元可能包含窗口颜色、纹理坐标等属性。
5. 片元处理(Fragment Shader作用阶段)
通过纹理坐标取得纹理中相对应的片元像素值(texel),根据自己的业务处理(比如提亮、饱和度调节、对比度调节、高斯模糊等)来变换这个片元的颜色。这里的输出是gl_FragColor,用于表示修改之后的像素的最终结果。
6. 帧缓冲操作
该阶段主要执行帧缓冲的写入操作。
glFlush()/glFinish()使得立即完成效果,glFlush为异步,glFinish为同步。
texture句柄在不同平台上一般都会在32个以上。