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

时间:2012-04-04 14:16:51

标签: opengl

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

2 个答案:

答案 0 :(得分:7)

过去,许多OpenGL函数都有double变体。例如glMultMatrixfd个版本。其中大多数不再存在,但这与floatdouble无关。 {GLAL 3.1及以上版本的glMultMatrixd glMultMatrixf已消失。

core OpenGL中,仍然存在具有double个变体的函数。 glDepthRange需要double,但有float版本(主要针对GL ES兼容性而引入)。有些函数没有double变体,例如glBlendColor

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

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

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

答案 1 :(得分:1)

因为大多数时候你不需要精度和双倍大小。