我正在使用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"),但不起作用.
根据规范,你不能使用glGetAttribLocation来获得统一的位置:spec(强调我的)
glGetAttribLocation查询由program指定的先前链接的程序对象,用于name指定的属性变量,并返回绑定到该属性变量的通用顶点属性的索引.如果name是矩阵属性变量,则返回矩阵的第一列的索引.如果指定的属性变量不是指定程序对象中的活动属性,或者名称以保留前缀"gl_"开头,则返回值-1.
因此,您发现了正在使用的实现中的错误.它是那些看似无害的阴险错误之一,但实际上使应用程序开发人员更容易编写不可移植的代码.
| 归档时间: |
|
| 查看次数: |
715 次 |
| 最近记录: |