1、创建着色器对象GLuint glCreateShader(GLenum type)

创建一个空白的着色器对象并返回其句柄,type 为GL_VERTEX_SHADER或者GL_FRAGMENT_SHADER

2、定义着色器源代码字符串

void glShaderSource(GLuint shader,GLuint nstrings,const GLchar** source,GLint *lenghs)

例如glShaderSource(*shader, sizeof(sources)/sizeof(*sources), sources, nullptr);

如果lenghs为nullptr,就会假定各个字符串都是以null结束,如果lengths不为nullptr,它就会指向一个包含strings各个对应元素的字符串长度的数组

3、编译着色器对象void glCompileShader(GLuint  shader)

4、创建一个程序对象 GLuint glCreateProgram(),返回一个空白的程序对象并返回其句柄,程序对象可以向其附加着色器对象

5、附加着色器对象

void glAttachShader(GLuint program,GLuint shader)

可以将着色器对象附加到多个程序对象上

6、链接程序 void glLinkProgram(GLuint program)

链接操作会分配一致变量的位置,解析独立编译的着色器对象之间的引用。如果包含GL_VERTEX_SHADER,就会创建一个将在可编程顶点处理器上运行的可执行程序,如果包含GL_FRAGMENT_SHADER,就会创建一个将在片元处理器上运行的可执行程序,为了保持清洁,一个很有用的编程技巧是一旦将着色器对象附加到程序对象并且连接成功后就删除它们,它们此时不会被删除,但是它们会标记为不再引用是删除。

7、安装程序对象,作为当前渲染状态的一部分void glUseProgram(GLuint program)