为什么OpenGL使用float而不是double?

use*_*414 5 opengl

我想知道为什么OpenGL在其函数中使用float而不是double.Double应该比float更准确.

Nic*_*las 7

过去,许多OpenGL函数都有一个double变体.glMultMatrix例如有fd变化.其中大多数不再存在,但这与floatvs. 无关double.glMultMatrixd 并且 glMultMatrixf在核心GL 3.1及以上版本中消失了.

核心OpenGL中,仍然存在具有double变体的函数.glDepthRange需要double,虽然有一个float版本(主要介绍了GL ES的兼容性).有迹象表明,一些功能具有double变种,像glBlendColor.

有时,OpenGL只是不一致.其他时候,它只是遵循一个合理的原则:不向用户撒谎.

glBlendColor.如果你可以传递双精度值,那就意味着浮点混合是以双精度精度进行的.由于它肯定不会(在任何存在的硬件上),提供提供该准确性的API对用户来说是默认的.您将高精度值用于低精度操作.虽然相同的逻辑是正确的glDepthRange(没有双精度深度缓冲器不可用),但它需要doubles.再次,不一致.

glUniform*功能套件是一个更好的例子.他们将状态设置为当前程序对象.直到GL 4.0,double版本不存在.为什么?因为那可能是骗局.double由于没有4.0之前的硬件可以实现它,因此GLSL 4.0前版本不允许您声明一个.double如果硬件无法处理它,那么允许用户创建是没有意义的.


Ste*_*vel 1

因为大多数时候你不需要精度,而双精度数是大小的两倍。