是什么导致了这个不可预测的 OpenGL 错误?
What's causing this unpredictable OpenGL bug?
我有一个 OpenGL 测试应用程序,它产生了非常不寻常的结果。当我启动应用程序时,它可能会或可能不会出现严重的图形错误。
它可能会产生这样的图像:
http://i.imgur.com/JwPoDrh.jpg
或者像这样:
http://i.imgur.com/QEYwhBY.jpg
或者只是正确的图片,如下所示:
http://i.imgur.com/zUJbwCM.jpg
场景由一个旋转的彩色立方体(由 12 个三角形组成)组成,上面有一个简单的着色器,根据模型 space 坐标的绝对值为像素着色。垃圾面似乎随着立方体旋转,就好像它们附着在立方体上一样,垃圾三角形或四边形经常在屏幕上短暂闪烁,就好像它们是在 2D 中渲染的一样。
我发现最不寻常的是行为高度不一致,在我不亲自更改系统上的任何其他内容的情况下重复启动完全相同的应用程序会产生不同的结果,有时会出现错误,有时不会,安排生成的垃圾脸也不一致。
我真的无法 post 应用程序的源代码,因为它非常冗长,而且实际的 OpenGL 调用分散在许多包装器 类 等中。
这是在以下条件下发生的:
Windows 10 64 位 OS(尽管我在 Windows 8.1 64 位下观察到非常相似的行为)。
AMD FX-9590 CPU(在 ASUS Sabertooth 990FX 上主频为 4.7GHz)。
AMD 7970HD GPU(它已经有几年历史了,偶尔在 3D 应用程序中屏幕区域会变得杂乱无章,但与我在这里遇到的情况完全不同)。
使用 SDL (https://www.libsdl.org/) window 和上下文创建。
为 OpenGL 使用 GLEW (http://glew.sourceforge.net/)。
使用 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 的教程,但适当的回流焊炉可提供更好的效果。
我有一个 OpenGL 测试应用程序,它产生了非常不寻常的结果。当我启动应用程序时,它可能会或可能不会出现严重的图形错误。
它可能会产生这样的图像: http://i.imgur.com/JwPoDrh.jpg
或者像这样: http://i.imgur.com/QEYwhBY.jpg
或者只是正确的图片,如下所示: http://i.imgur.com/zUJbwCM.jpg
场景由一个旋转的彩色立方体(由 12 个三角形组成)组成,上面有一个简单的着色器,根据模型 space 坐标的绝对值为像素着色。垃圾面似乎随着立方体旋转,就好像它们附着在立方体上一样,垃圾三角形或四边形经常在屏幕上短暂闪烁,就好像它们是在 2D 中渲染的一样。
我发现最不寻常的是行为高度不一致,在我不亲自更改系统上的任何其他内容的情况下重复启动完全相同的应用程序会产生不同的结果,有时会出现错误,有时不会,安排生成的垃圾脸也不一致。
我真的无法 post 应用程序的源代码,因为它非常冗长,而且实际的 OpenGL 调用分散在许多包装器 类 等中。
这是在以下条件下发生的:
Windows 10 64 位 OS(尽管我在 Windows 8.1 64 位下观察到非常相似的行为)。
AMD FX-9590 CPU(在 ASUS Sabertooth 990FX 上主频为 4.7GHz)。
AMD 7970HD GPU(它已经有几年历史了,偶尔在 3D 应用程序中屏幕区域会变得杂乱无章,但与我在这里遇到的情况完全不同)。
使用 SDL (https://www.libsdl.org/) window 和上下文创建。
为 OpenGL 使用 GLEW (http://glew.sourceforge.net/)。
使用 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 的教程,但适当的回流焊炉可提供更好的效果。