|
|
Glsl 7.2
当我们把源代码载入之后,下面就要开始编译它了。编译的结果作为shader对象的一部分,直到我们又编译一次代码,把上次编译的内容覆盖掉,或者shader对象被删除。编译shader的函数是:
void?glCompileShaderARB(GLhandleARB?shader)
传递进函数的GLhandleARB就是先前已经拷贝过源代码的shader对象。
编译的结果有二种,gl_true与gl_false。如果编译通过,那么shader对象的状态将是gl_true,否则是gl_false。你可以用glGetObjectParameterARB函数与GL_OBJECT_COMPILE_STATUS_ARB参数查询编译状态,具体请参阅api说明。
如果我们提供的代码中有些问题比如语法错误等,自然的,编译将会失败。无论怎样,都可以通过glGetInfoLogAR函数查询shader对象获得其信息。
记住一点,Glsl编译器对不同的shader,fs and vs有着不同的编译策略。
上文已经提到, 调用glGetInfoLogARB函数可以查询shader的编译结果信息。但|是不仅仅是true与false那么简单。如果没有编译成功那么除了那些恼人的error外,还将提示哪里有问题,以及一些警告信息。
有一点要注意,无须担心glCompileShaderARB的运作机制。在编译动作没有完成前,其他函数如glLinkProgramARB是不会被执行的。在继续完成之前如果你想确定编译是成功的那么请调用glGetObjectParameterARB函数。同样,在编译没有完成之前,这个函数也仍旧不会执行。
|
|