8

我目前正在使用 OpenGL 编写科学成像应用程序。

我想知道当我的代码(C++ / OpenGL 和简单的 GLSL)在不同的硬件(ATI 与 NVidia、各种 NVidia 代和各种操作系统)上执行时,OpenGL 渲染(就从 FBO 检索的像素而言)是否应该是完全确定的)?

更准确地说,每次我在任何硬件(可以运行基本的 GLSL 和 OpenGL 3.0)上运行我的代码时,我都需要完全相同的像素缓冲区......

那可能吗?我应该考虑一些建议吗?

如果不可能,是否有特定品牌的视频卡(可能是 Quadro?)可以在改变主机操作系统的同时做到这一点?

4

3 回答 3

5

来自 OpenGL 规范(版本 2.1 附录 A):

OpenGL 规范不是像素精确的。因此,它不能保证不同 GL 实现生成的图像之间完全匹配。但是,在某些情况下,规范确实为由相同实现生成的图像指定了完全匹配。

如果禁用所有抗锯齿和纹理,则很有可能在平台上获得一致的结果。但是,如果您需要抗锯齿或纹理或 100% 像素完美保证,请仅使用软件渲染:http ://www.mesa3d.org/

于 2011-10-27T21:37:33.633 回答
2

通过“确定性”,我将假设您的意思是您所说的(而不是该词的实际含义):您可以跨平台获得像素相同的结果。

不,没有机会。

您可以通过使用图形驱动程序应用程序中的设置来更改从渲染中获得的像素结果。来自同一硬件的驱动程序修订版可以改变您获得的内容。

OpenGL 规范从不要求像素完美的结果。抗锯齿和纹理过滤尤其是模糊的部分。

于 2011-10-27T21:29:58.280 回答
0

如果您通读 OpenGL 规范,则必须满足许多确定性条件才能使实现符合标准,但也有大量实现细节完全取决于硬件供应商/驱动程序开发人员。除非您使用属于确定性/不变类别的令人难以置信的基本技术进行渲染(我相信这会阻止您使用过滤纹理、抗锯齿、照明、着色器等),否则该标准允许不同硬件甚至不同驱动程序之间存在相当大的差异在相同的硬件上。

于 2011-10-27T21:29:33.783 回答