一段时间以前,我在OpenGL中编写了2D流体求解器(代码在此处)。

虽然它可以在我的板载Intel GPU上完美运行,但当使用相同的代码运行时,模拟很快就会“崩溃”。

nvidia卡:



在第二张图片中,流体正在“添加”到系统中,并且也在“扩散”中,但是与第一张图片不同,没有平流。

我想知道是什么原因造成的。难道是因为不同的供应商对标准的理解不同?

PS:“红色”和“绿色”分别代表x和y方向上矢量场的大小。

评论

IHV实现之间肯定存在差异。这可能是由于驱动程序错误,对标准歧义性的不同解释,甚至可能是编译器如何处理浮点算术等方面的差异。需要进行一些更详细的调试才能了解发生了什么。
@NathanReed,什么样的信息会有所帮助?

首先像其他任何图形/着色器问题一样对其进行调试。隔离每个遍历,查看在哪个遍历中引入了错误,然后隔离着色器中哪里出了问题。

如果您使用每帧可变的时间步长,这可能是一个vsync问题。

您是否在使用任何依赖于供应商的GLSL函数,例如noise *(据我所知,大多数供应商都没有实现)?