我需要决定是使用GL_UNSIGNED_SHORT还是GL_FLOAT作为顶点的(静态)VBO。short使用的内存是原来的2倍,但它是否也降低了渲染速度(因为GPU必须将它们转换为float)?对于纹理坐标,我可以使用GL_UNSIGNED_BYTE表示较小的纹理,GL_UNSIGNED_表示较大的纹理(使用纹理矩阵映射到0-1),但我担心这可能会降低渲染速度。

最佳答案

对于任何现代硬件(支持DX10或更高版本),可以假设属性读取性能始终由内存访问控制,而不是由从整数到浮点的转换控制。基本上是免费的。
DX9类硬件也是如此,但有些硬件的顶点格式不太好用。
也就是说,我不确定是否能够使用无符号字节作为纹理坐标。在大多数模型中,纹理坐标通常需要比每texel更高的精度。无符号短消息通常很好,但字节精度不够。

关于c - OpenGL VBO:短还是 float ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8872203/

10-12 18:05