下图展示了创建一个着色器的必要步骤:
第一步:创建着色器容器对象。用于此目的的函数返回一个指向着色器容器对象的句柄。
在OpenGL 2.0中,该函数是:
GLuint glCreateShader(GLenum shaderType);
Parameter:
shaderType - GL_VERTEX_SHADER or GL_FRAGMENT_SHADER.
在ARB扩展中,该函数是:
GLhandleARB glCreateShaderObjectARB(GLenum shaderType);
Parameter:
shaderType - GL_VERTEX_SHADER_ARB or GL_FRAGMENT_SHADER_ARB.
你可以根据自己的需要,创建足够多的着色器以添加到应用程序中。但是记住:添加到单个程序的顶点着色器集中,只能有一个main函数,片段着色器也如此。
接下来的步骤:添加源代码。着色器的源代码是一个字符串数组,当然你也可以使用一个指向单个字符串的指针。
在OpenGL2.0中,设置源代码的函数是:
void glShaderSource(GLuint shader, int numOfStrings, const char **strings, int *lenOfStrings);
Parameters:
shader - 着色器句柄.
numOfStrings - 数组中字符串的个数.
strings - 字符串数组.
lenOfStrings - 包含每个字符串长度的数组或者为NULL, NULL表示每个字符串都已'/0’结尾.
在ARB扩展中,该函数是:
void glShaderSourceARB(GLhandleARB shader, int numOfStrings, const char **strings, int *lenOfStrings);
Parameters:
shader - 着色器句柄.
numOfStrings - 数组中字符串的个数.
strings - 字符串数组.
lenOfStrings - 包含每个字符串长度的数组或者为NULL, NULL表示每个字符串都已'/0’结尾.
最后一步:编译着色器。
在OpenGL中,达到此目的的函数是:
void glCompileShader(GLuint shader);
Parameters:
shader - 着色器句柄.
在ARB扩展中,该函数是:
void glCompileShaderARB(GLhandleARB shader);
Parameters:
shader - 着色器句柄.