[英]OpenGL floating point precision
我正在开发一个项目,从旧版/直接 OpenGL 迁移到现代 OpenGL(核心配置文件)。 在传统OpenGL实现,我们使用双精度,也就是说,我们利用了GL_DOUBLE
在glVertexPointer
和我们使用glLoadMatrixd
等。然而,在现代的OpenGL,OpenGL的只/ GLSL 4.0 +支持双精度。
旧的 OpenGL 如何支持双精度而新的 OpenGL 不支持? 传统 OpenGL 如何处理双精度,而大多数显卡甚至不支持双精度?
我在互联网上找不到任何信息或一些答案太旧了。
现在的显卡支持双精度吗? 我应该使用 OpenGL 4.0 吗?
旧的 OpenGL 如何支持双精度而新的 OpenGL 不支持? 传统 OpenGL 如何处理双精度,而大多数显卡甚至不支持双精度?
它不是你认为的那样。 您可以使用双精度作为顶点属性并不意味着(并且从来没有)GL 实现将使用该精度进行计算 - GPU 从未这样做过。 在任何情况下,数据都会转换为单精度。 矩阵也是如此——在传统 GL 中,发送到 GPU 的矩阵从来都不是双精度的,无论您在指定 CPU 端数据时是否使用d
或f
后缀。
只是在更新的 GPU 中,着色器内核中可以使用双精度,而现代 GL 4.x 允许您第一次使用它。
另请注意,许多现实世界的消费级 GPU 都有一些疯狂的低双精度比,例如 FP32 性能的 1/32,因此在使用之前最好三思而后行。 对于图形,您很少需要它。 您之前的代码与遗留 GL 一起工作的事实证明您不需要精度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.