A tutorial我特意提到使用glVertexAttribIPointer来表示整数数据,将数据上传到着色器中的ivec4数据类型。
我想知道为什么我不能将glVertexAttribPointer与GL_INT数据类型一起使用。为什么它会破坏我的数据?阅读API参考文献并未提供任何线索。
答案 0 :(得分:5)
我查看了OpenGL 3.3(核心配置文件)规范,我能找到的就是第29页的这个措辞:
如果规范化为
TRUE
,则 VertexAttribPointer 指定的数组的数据将通过规范化转换为浮点数,否则将直接转换为浮点数。由 VertexAttribIPointer 指定的数组的数据将始终保留为整数值;这些数据称为纯整数。
我无法找到任何明确的提及错误检查,未指定的值或未定义的行为,但可能是,如果您的属性数组将整数转换为浮点数,但您的着色器采用整数,那么你就是&#39 ; ll以不正确的属性值结束。
我知道很老的硬件在任何地方都使用了浮点数,所以ivec4
只是伪装成vec4
。因此,即使这适用于您的硬件,也不应该这样做。
摘要:不要这样做。