glVertexAttrib函数系列允许向每个顶点添加通用属性。 您可以设置与数据关联的索引。但是,您无法任意选择索引,因为我发现使用低于4的索引将破坏标准(Normal / TexCoord)属性,加上0是顶点位置。 我怎样才能找到,这将是第一个用于自定义属性的真正自由索引?
答案 0 :(得分:7)
我找到了一个列出nvidia硬件预定义索引的网站:
http://www.opengl.org/sdk/docs/tutorials/ClockworkCoders/attributes.php
不幸的是有一定的 在NVidia上使用它时的限制 硬件。根据NVidia的说法:“GLSL 试图消除混叠 顶点属性,但这是不可或缺的 NVIDIA的硬件方法和 维持所必需的 与现有OpenGL的兼容性 NVIDIA客户的应用程序 依靠。 NVIDIA的GLSL实施 因此不允许内置 顶点属性与a碰撞 通用顶点属性 分配给特定的顶点 属性索引用 glBindAttribLocation。例如,你 不应该使用gl_Normal(内置的 顶点属性)也使用 glBindAttribLocation绑定泛型 顶点属性名为“whatever”to 顶点属性索引2因为 gl_Normal别名为索引2.“
换句话说,NVidia硬件 索引保留给内置 属性:
答案 1 :(得分:2)
你不应该选择自己的指数。 GL可以通过代码中的属性名称通过glGetAttribLocation函数为您提供免费的(如果您在链接程序后执行此操作)。
我从未遇到过这个问题...但不幸的是,我没有自己的着色器包装器代码(在工作时)可以解释原因。
答案 2 :(得分:2)
您实际上可以专门使用顶点属性数组,因此完全跳过glVertexPointer()
和co。这将避免任何翻倍,并且也很好地统一。您仍然应该使用glGetAttribLocation()
,因为AFAIK您无法提前知道每个属性在运行时将映射到哪个索引。
与往常一样,the extension spec拥有所有血腥的细节。