理解着色器和程序
要想使用着色器进行渲染,需要创建着色器对象和程序对象。着色器对象可以理解为编译器,程序对象可以理解为链接程序。 着色器对象是包含单个着色器的对象。源代码提供给着色器对象,然后着色器对象被编译为一个目标形式(类似于.obj文件)。编译之后,着色器对象可以连接到一个程序对象。程序对象可以连接到多个着色器对象。在Opengl ES中,每个程序对象必须连接一个顶点着色器和一个片段着色器(不多也不少),这和桌面Opengl不同。程序对象被链接为可用于渲染的最后“可执行程序”。
获得链接后的着色器对象的一般过程如下:
1、 创建一个顶点着色器对象和一个片段着色器对象
2、将源代码连接到每个着色器对象
3、编译着色器对象
4、创建一个程序对象
5、将编译后的着色器对象连接到程序对象
6、链接程序对象
创建和编译一个着色器
1、GLuint shader = glCreateShader(GLenum type);
创建着色的类型可以是type = GL_VERTEX_SHADER 顶点着色器或者type = GL_FRAGMENT_SHADER片段着色器。返回值shader 是指向新着色器对象的句柄。
2、void glDeleteShader(GLuint shader);
可以用如上方法,通过着色器对象句柄删除着色器对象
注意:如果一个着色器连接到一个程序对象后,调用glDeleteShader不会立即删除着色器,而是将着色器标记为删除,在着色器不再连接到任何程序对象时,它的内存才被释放。
3、void glShaderSource(GLuint shader,GLsizei count,const GLchar* const *string,const GLint * length);
函数作用:提供着色器源代码或者指定着色器源代码
shader 指向着色器对象的句柄
coun