过去,许多OpenGL函数都有一个double变体.glMultMatrix例如有f和d变化.其中大多数不再存在,但这与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如果硬件无法处理它,那么允许用户创建是没有意义的.
| 归档时间: |
|
| 查看次数: |
6011 次 |
| 最近记录: |