3 shader attributes opengl-es glsl webgl
WebGL API(以及 OpenGL)有一个著名的函数getAttribLocation
http://msdn.microsoft.com/en-us/library/ie/dn302408(v=vs.85).aspx
在我的项目中,我尝试使用此函数获取所需的属性,但获取值-1
。
没关系,当着色器中没有这样的属性时,但在我的程序中有:
看见?我已将着色器的现有成员转储到控制台中,并且vertexColor
存在。-1
当我从中获取属性的着色器转储显示内存中存在这样的属性时,我不知道如何获取。
如果要获取其他属性,一切正常,除了这个(但它的声明方式与其他属性相同,并且我没有删除内存中的某些内容):
正如您所看到的vertexPosition
,textureCoordinatesAttribute
它返回属性的位置号。
那么出了什么问题以及为什么会发生我无法解释。请大家帮忙提个建议。
无法提供源代码,因为我正在开发大型库,目前有 3k+ 行代码。我只能告诉你,你可能会通过屏幕截图和函数看到着色器是如何创建的,获取属性只是迭代具有属性列表的输入对象的集合,并且对于每个属性都getAttribLocation
从 WebGL 调用函数。尽管如此,屏幕截图显示了真实的转储,您可以看到,我所说的是着色器中存在的属性的真相。此外,您还可以看到,获取其中两个给出了正确的结果,而一个则失败。我不知道出了什么问题。至于我,如果要使用逻辑,它一定不能返回该-1
值。属性存在于内存中并且调用语法是正确的,所以这个问题现在对我来说相当神秘。
如果未使用该属性,则允许 GLSL 编译器对其进行优化。WebGL API 的设计使您可以忽略这一点。传递-1
给任何采用属性位置的函数基本上都变成了无操作。
同样,GLSL 编译器可以优化掉未使用的制服。gl.getUniformLocation
将返回null
未知的制服并传递null
给任何采用统一位置的函数都是无操作
以这种方式工作是一件好事,因为在调试时通常会注释掉着色器的某些部分。因为未知的属性和统一的位置就变成了无操作,所以一切都继续工作,没有错误。
归档时间: |
|
查看次数: |
1367 次 |
最近记录: |