glGetUniformLocation和glGetAttribLocation之间的区别

时间:2017-12-10 21:18:56

标签: opengl-es

我正在使用OpenGL ES 2.0。显然,您可以使用glGetAttribLocation获取任何着色器变量的位置。这意味着您不需要将glGetUniformLocation用于统一变量,但是您不能以相反的方式执行此操作。这是为什么?

编辑:

VS:      制服mat4 uMvpMat;      属性vec4 vPos;      void main(){          gl_Position = uMvpMat * vPos;      }

FS:      精密介质浮子;      均匀的vec4 vColor;      void main(){          gl_FragColor = vColor;      }

例如,glGetUniformLocation(programSolidHandle, "vColor")似乎等同于glGetAttribLocation(programSolidHandle, "vColor")。但是,这并不适用于glGetUniformLocation(programSolidHandle, "vPos"),但这并不起作用。

1 个答案:

答案 0 :(得分:5)

根据规范,你不能使用glGetAttribLocation来获得统一的位置:spec(强调我的)

  

glGetAttribLocation查询以前链接的程序对象   由程序指定的name指定的属性变量   并返回绑定的通用顶点属性的索引   到那个属性变量。如果name是矩阵属性变量,   返回矩阵的第一列的索引。 如果命名   属性变量不是指定的活动属性   程序对象或名称以保留前缀" gl _", a开头   值为-1。

因此,您发现了正在使用的实现中的错误。它是那些看似无害的阴险错误之一,但实际上使应用程序开发人员更容易编写不可移植的代码。