在OpenGL中(特别是在这种情况下是ES 2.0),如果我为每个顶点传递2个组件会发生什么,如下所示:
glVertexAttribPointer( 0, 2, GL_FLOAT, GL_FALSE, sizeof( MyVertexStruct ), pPos );
...但着色器需要三个?
似乎将第三个(在本例中为Z)组件默认为0,这就是我想要的,但我对依赖行为犹豫不决。这是在OpenGL,ES还是GLSL标准的某处定义的?
(我的搜索失败了我:在红皮书,紫皮书或khronos.org参考页面中找不到任何内容,但我可能只是忽略了它。)
答案 0 :(得分:2)
虽然我没有在OpenGL规范中查找过,但我很确定它是定义的行为,如果它有更少的组件,每个属性都会扩展到(0,0,0,1),因为它是当使用单个属性函数时也会这样做,例如glVertexAttrib2f
(确实由标准指定)。
编辑:我在OpenGL ES 2.0规范中查了一下,它说:
当数组元素i被DrawArrays传递给GL时 DrawElements命令,每个通用属性扩展为四个 组件。如果size是1,那么属性的x分量是 由数组指定;隐式设置y,z和w分量 分别为零,零和一。如果大小是2那么x和y 属性的组件由数组指定; z和w 组件分别隐式设置为零和一。如果大小 是三,然后指定x,y和z,并将w隐式设置为 一。如果size为4,则指定所有组件。
所以它确实像你和我一样。