概述
如果需要使用着色器进行渲染的话,则首先必须有两个对象,分别是着色器对象及程序对象。那么如何理解这两者呢?可以将其理解为C语言的编译器和链接器。
流程是这样的,源代码中提供着色器对象,然后着色器被编译成一个目标形式,再然后链接到一个程序对象。一个程序对象对应多个着色器对象,每个程序对象必须有一个顶点着色器和一个片段着色器。
流程如下:
1.创建一个顶点着色器和一个片段着色器
2.将源代码连接到每个着色器对象
3.编译着色器对象
4.创建一个程序对象
5.将上面得到的着色器对象链接进程序对象中
6.链接程序对象
创建和编译一个着色器
创建
|
|
删除
|
|
删除着色器对象的句柄
注:如果着色器已经链接到程序对象中的话,这时候直接调用glDeleteShader不会立刻去删除着色器,而是将其标注,等到着色器不在连接到任何程序对象时,其就会被删除
提供着色器源代码
|
|
编译着色器
|
|
调用glCompileShader将编译已经保存在着色器对象的着色器源代码。和常规的语言编译器一样,编译之后你想知道的第一件事情是有没有错误。你可以使用glGetShaderiv查询查询这一信息和其他有关着色器对象的信息。
检测着色器是否成功编译
|
|
创建和链接程序
创建程序
|
|
删除程序
|
|
关联着色器和程序
|
|
注:对于程序对象和着色器对象的连接没有具体的时间要求,但是没有程序对象只能有一个顶点着色器和片段着色器与之连接
断开着色器和程序
|
|
链接着色器和程序
|
|
上述的工作都已经完成了之后需要链接程序的对象了。连接操作负责生成最终的可执行程序。在连接的时候将检查各种对象的数量,确保可以链接成功。
检测链接是否成功
|
|
设置程序对象为活动对象
|
|