是什么导致了这个不可预测的OpenGL错误?

What's causing this unpredictable OpenGL bug?

本文关键字:OpenGL 错误 不可预测 是什么      更新时间:2023-10-16

我有一个OpenGL测试应用程序,它产生了令人难以置信的不寻常的结果。当我启动应用程序时,它可能会出现严重的图形错误,也可能不会。

它可能会产生一个像这样的图像:https://i.stack.imgur.com/u6RxI.jpg

或者像这样:https://i.stack.imgur.com/PoUc7.jpg

或者只是正确的图像,像这样:https://i.stack.imgur.com/kKNa1.jpg

场景由一个旋转的彩色立方体(由12个三角形组成)组成,上面有一个简单的着色器,该着色器根据模型空间坐标的绝对值为像素着色。垃圾面似乎与立方体一起旋转,就好像它们附着在立方体上一样,垃圾三角形或四边形经常在屏幕上短暂闪烁,就好像它们是在2D中呈现的一样。

我发现最不寻常的是这种行为是高度不一致的,重复启动完全相同的应用程序而不需要我亲自更改系统上的任何其他内容将产生不同的结果,有时有bug,有时没有,产生的垃圾面排列也不一致。

我真的不能发布应用程序的源代码,因为它非常长,而且实际的OpenGL调用分散在许多包装器类中。

在下列情况下发生:

  • Windows 10 64位操作系统(尽管我在Windows 8.1 64位操作系统下观察到非常相似的行为)

  • AMD FX-9590 CPU(华硕Sabertooth 990FX的4.7GHz频率)

  • AMD 7970HD GPU(它是几年前的,偶尔在3D应用程序中的屏幕区域变得混乱,但没有我在这里遇到的规模)。

  • 使用SDL (https://www.libsdl.org/)创建窗口和上下文

  • 使用GLEW (http://glew.sourceforge.net/) for OpenGL.

  • 使用OpenGL版本1.0,3.3和4.3(我假设SDL确实使用我指示它的版本)。

  • AMD Catalyst驱动程序版本15.7.1(驱动程序打包版本列出为15.20.1062.1004-150803a1-187674C,尽管我再次在更老的驱动程序上看到非常相似的行为)。

  • Catalyst Control Center列出我的OpenGL版本为6.14.10.13399.

我看这像是坏了的显卡。最有可能是一些问题与内存(要么内存本身,或一些焊接问题)。如果由于某种原因,在开始读取之前,为内存操作设置地址没有完全解决或根本没有发生,则可能会发生类似您所看到的工件;这可能是由于GPU和内存之间的连接不良(焊接连接失败)或内存本身失败而发生的。

解决方法:购买新的显卡。您可以尝试一下,如果您使用回流处理它会发生什么;有一些教程教你如何DIY,但一个合适的回流炉会得到更好的效果。