我可以使用glVertexAttribPointer而不是glVertexAttribIPointer

时间:2015-12-23 19:51:30

标签: opengl

A tutorial我特意提到使用glVertexAttribIPointer来表示整数数据,将数据上传到着色器中的ivec4数据类型。

我想知道为什么我不能将glVertexAttribPointer与GL_INT数据类型一起使用。为什么它会破坏我的数据?阅读API参考文献并未提供任何线索。

1 个答案:

答案 0 :(得分:5)

我查看了OpenGL 3.3(核心配置文件)规范,我能找到的就是第29页的这个措辞:

  

如果规范化为TRUE,则 VertexAttribPointer 指定的数组的数据将通过规范化转换为浮点数,否则将直接转换为浮点数。由 VertexAttribIPointer 指定的数组的数据将始终保留为整数值;这些数据称为纯整数。

我无法找到任何明确的提及错误检查,未指定的值或未定义的行为,但可能是,如果您的属性数组将整数转换为浮点数,但您的着色器采用整数,那么你就是&#39 ; ll以不正确的属性值结束。

我知道很老的硬件在任何地方都使用了浮点数,所以ivec4只是伪装成vec4。因此,即使这适用于您的硬件,也不应该这样做。

摘要:不要这样做。