Hexococos2dx 3.0 ---- CCGLProgram 2015-03-11
首先,这是封装了着色器编译绑定的流程,还有涉及顶点属性和统一值等。
这里涉及到以下opengGL的函数:
- glCreateShader
- glShaderSource
- glCompileShader
- glCreateProgram
- glAttachShader
- glLinkProgram
- glDeleteShader
以下是一段关乎着色器的代码段,引用自OpenGL超级宝典(第六版)
1 | GLuint vertex_shader; |
从上面代码可以大致了解如何使用着色器的一个流程。
路径
1 | 2d/shaders/CCGLProgram.h |
分析
1 | private: |
我们主要可以看见头文件中的成员变量中保存了,顶点着色器描述字,片段着色器描述字,统一值数组等。
创建初始化
1 | bool GLProgram::initWithByteArrays(const GLchar* vShaderByteArray, const GLchar* fShaderByteArray) |
我们回来看初始化的代码,这段代码包含如下:
- 着色器程序的创建(program)
- 顶点着色器和片段着色器的编译和绑定
- 每个阶段的错误检查
1 | bool GLProgram::compileShader(GLuint * shader, GLenum type, const GLchar* source) |
然后我们再来看看这个封装的编译着色器的函数,这里值得注意的是cocos2dx添加的统一值。
- uniform mat4 CC_PMatrix;
- uniform mat4 CC_MVMatrix;
- uniform mat4 CC_MVPMatrix;
- uniform vec4 CC_Time;
- uniform vec4 CC_SinTime;
- uniform vec4 CC_CosTime;
- uniform vec4 CC_Random01;
链接
1 | bool GLProgram::link() |
然后在设置完顶点属性和统一值等等东西之后做了这些事情:
- 先将着色器程序连接到openGL之中
- 然后清理编译出来的顶点和片段着色器