我需要决定是否应该将GL_UNSIGNED_SHORT或GL_FLOAT用于我的(静态)VBO顶点。短片使用的内存减少了2倍,但它也降低了渲染速度(因为GPU必须将它们转换为浮点数)?对于纹理坐标我也可以使用GL_UNSIGNED_BYTE用于较小的纹理,使用GL_UNSIGNED_SHORT用于较大的纹理(使用纹理矩阵映射到0-1),但我担心它可能会降低渲染速度。
答案 0 :(得分:3)
对于任何现代硬件(支持DX10或更好),您可以假设属性读取性能始终由内存访问控制,而不是从整数到浮点的转换。基本上它是免费的。
这对于DX9级硬件来说也是如此,但是某些硬件具有某些顶点格式,但它们并不适用。
话虽这么说,我不能确定能否使用无符号字节作为纹理坐标。在大多数模型中,纹理坐标通常需要比per-texel更高的精度。无符号短路通常很好,但是没有足够的字节精度使其工作。
答案 1 :(得分:2)
将short转换为float应该是一个非常便宜的操作。我认为内存带宽的节省将超过额外的处理成本。
但如果没有实际测试,这仍然只是一个疯狂的猜测。