繁体   English   中英

OpenGL浮点精度

[英]OpenGL floating point precision

我正在开发一个项目,从旧版/直接 OpenGL 迁移到现代 OpenGL(核心配置文件)。 在传统OpenGL实现,我们使用双精度,也就是说,我们利用了GL_DOUBLEglVertexPointer和我们使用glLoadMatrixd等。然而,在现代的OpenGL,Op​​enGL的只/ GLSL 4.0 +支持双精度。

旧的 OpenGL 如何支持双精度而新的 OpenGL 不支持? 传统 OpenGL 如何处理双精度,而大多数显卡甚至不支持双精度?

我在互联网上找不到任何信息或一些答案太旧了。

现在的显卡支持双精度吗? 我应该使用 OpenGL 4.0 吗?

旧的 OpenGL 如何支持双精度而新的 OpenGL 不支持? 传统 OpenGL 如何处理双精度,而大多数显卡甚至不支持双精度?

它不是你认为的那样。 您可以使用双精度作为顶点属性并不意味着(并且从来没有)GL 实现将使用该精度进行计算 - GPU 从未这样做过。 在任何情况下,数据都会转换为单精度。 矩阵也是如此——在传统 GL 中,发送到 GPU 的矩阵从来都不是双精度的,无论您在指定 CPU 端数据时是否使用df后缀。

只是在更新的 GPU 中,着色器内核中可以使用双精度,而现代 GL 4.x 允许您第一次使用它。

另请注意,许多现实世界的消费级 GPU 都有一些疯狂的低双精度比,例如 FP32 性能的 1/32,因此在使用之前最好三思而后行。 对于图形,您很少需要它。 您之前的代码与遗留 GL 一起工作的事实证明您不需要精度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM