通过glVertexAttribPointer传递的组件少于着色器期望的组件

时间:2010-11-05 01:27:01

标签: opengl-es

在OpenGL中(特别是在这种情况下是ES 2.0),如果我为每个顶点传递2个组件会发生什么,如下所示:

  glVertexAttribPointer( 0, 2, GL_FLOAT, GL_FALSE, sizeof( MyVertexStruct ), pPos );

...但着色器需要三个?

似乎将第三个(在本例中为Z)组件默认为0,这就是我想要的,但我对依赖行为犹豫不决。这是在OpenGL,ES还是GLSL标准的某处定义的?

(我的搜索失败了我:在红皮书,紫皮书或khronos.org参考页面中找不到任何内容,但我可能只是忽略了它。)

1 个答案:

答案 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,则指定所有组件。

所以它确实像你和我一样。