【问题标题】:Different OpenGL behaviour on different hardware不同硬件上的不同 OpenGL 行为
【发布时间】:2021-05-21 14:16:30
【问题描述】:

我有一个使用 OpenGL 绘制输出图像的应用程序。出于测试目的,我正在尝试创建参考图像,然后使用精度散列将它们与程序输出进行比较。虽然它在单台计算机的环境中完美运行,但在运行不同 GPU 的计算机上使用相同的方法时,我遇到了奇怪的问题。虽然在不同 GPU 上生成的图像看起来与人眼完全相同,但它们在相互比较时无法通过精度哈希测试,并且逐像素比较表明有几个像素“关闭”。几天来,我一直试图在我的代码中找到问题,但无济于事,这种行为在我使用的所有着色器上都表现出来。这可能是由于不同硬件制造商的 OpenGL 实现不同造成的吗?将在不同 GPU 上生成的图像与 phash 进行比较以进行测试是一种有效的方法吗?

【问题讨论】:

标签: c++ opengl shader


【解决方案1】:

这可能是由于 OpenGL 实现的差异造成的 来自不同的硬件制造商?这是一种有效的方法吗 将在不同 GPU 上生成的图像与 phash 进行比较以进行测试 目的?

不,不是。引用OpenGL 4.6 core profile specification,附录A“不变性”(强调我的):

OpenGL 规范不是像素精确的。因此它不 保证不同 GL 生成的图像之间的精确匹配 但是,规范确实指定了确切的 匹配,在某些情况下,由相同的产生的图像 执行。本附录的目的是识别和 为需要完全匹配的情况提供理由。

仅在相同的实现中,在非常严格的限制下才能保证完全匹配,这对于例如需要在不同通道中获得完全相同片段的多通道方法很有用。

请注意,其他 3D 渲染 API 也不是像素精确的。实际的硬件实现在各个 GPU 之间确实有所不同,并且规范通常只指定每个实现必须满足的更广泛的规则,并且您可以依赖。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-09-17
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 2010-12-08
  • 1970-01-01
  • 2013-02-06
  • 2011-12-16
相关资源
最近更新 更多