Cocos OpenGL/ES学习之一—你好,三角形(3)OpenGL ES 着色器与程序

OpenGL ES使用着色器渲染需要创建着色器对象程序对象。着色器对象负责加载、编译着色器程序源码,程序对象负责连接着色器对象,可以连接多个着色器对象。在OpenGL ES中程序对象只能并且至少连接一个顶点着色器对象和一个片段着色器对象。

具体的步骤:

  1. 创建一个顶点着色器对象和一个片段着色器对象;
  2. 着色器对象连接相应的源代码;
  3. 编译着色器对象;
  4. 创建一个程序对象;
  5. 程序对象连接着色器对象
  6. 链接程序对象。

创建着色器

加载着色器源码

编译着色器

创建程序

连接着色器对象

链接程序对象

上面分别列出了各步骤中用到的关键函数。

其他OpenGL ES API:

编译阶段使用glGetShaderiv获取编译情况

编译阶段使用glGetShaderInfoLog获取编译错误

在连接阶段使用glGetProgramiv获取连接情况

在连接阶段使用glGetProgramInfoLog获取连接错误

清理shader的glDeleteShader方法

在cocos引擎的renderer/CCGLProgram文件定义GLProgram封装了着色器和程序操作。

步骤1到3包含在GLProgram::compileShader函数中:

步骤4(创建程序对象)到5(连接程序与着色器)在下面函数中

6链接程序:

使用着色器

删除与清理

cocos引擎renderer/CCGLProgramCache文件定义GLProgramCache单例类缓存管理GLProgram 对象(shaders),同时管理众多内置的Shaders。

在链接程序中如下的函数:

这些函数将在下一节将介绍:顶点属性、顶点数组和缓冲区对象。

示例程序开源托管在Github: CocosShader

这一篇对过程介绍的比较清楚,推荐阅读:OpenGL ES 2.0 Shader相关介绍