GL_ACTIVE_UNIFORMS不会返回没有用到的uniform

最近在用OpenGL es 3.0开发渲染模块,从头开始,碰到好多问题,在这里记录一下。首先是shader里面写了uniform变量,但是最终结果没用到,被注释掉了。然后用glGetUniformLocation,返回值为-1,参考文档上说:This function returns -1 if name does not correspond to an active uniform variable in program or if name is associated with a named uniform block.

那么什么是active uniform variable呢?参考如下说明:

To query for the list of active uniforms in a program, you first call glGetProgramiv with the GL_ACTIVE_UNIFORMS parameter (as described in the previous section). This will tell you the number of active uniforms in the program. The list includes uniforms in named uniform blocks, default block uniforms declared in shader code, and built-in uniforms used in shader code. A uniform is considered "active" if it was used by the program. In other words, if you declare a uniform in one of your shaders but never use it, the linker will likely optimize that away and not return it in the active uniform list. You can also find out the number of characters (including the null terminator) that the largest uniform name has in the program; this can be done by calling glG

还有采用glUniform3f来设置uniform变量的时候,如果shader里面用的是vec4来定义的,也会出错。必须严格对应,用glUniform4f来设置。


参考链接:GL_ACTIVE_UNIFORMS可能不会返回没有用到的uniform_weixin_34074740的博客-CSDN博客

你可能感兴趣的:(GL_ACTIVE_UNIFORMS不会返回没有用到的uniform)