2015-09-12 57 views
-1

我有一个OpenGL测试应用程序,产生令人难以置信的不寻常的结果。当我启动应用程序时,它可能会或可能不会出现严重的图形错误。什么导致这个不可预知的OpenGL错误?

它可能会产生这样的图像: http://i.imgur.com/JwPoDrh.jpg

或者这样: http://i.imgur.com/QEYwhBY.jpg

或者只是正确的图像,像这样: http://i.imgur.com/zUJbwCM.jpg

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

我发现最不寻常的事情是,行为是高度不一致的,重复启动完全相同的应用程序,而不是我个人改变系统上的其他任何东西会产生不同的结果,有时会出错,有时候不会,产生的垃圾面也不一致。

我无法真正发布应用程序的源代码,因为它非常冗长,实际的OpenGL调用分布在很多包装类和类似的地方。

这是在以下条件下发生:

  • 视窗10 64位操作系统(虽然我已经视窗8.1 64位下观察非常相似的行为)。

  • AMD FX-9590 CPU(华硕Sabertooth 990FX主频为4.7GHz)。

  • AMD 7970HD GPU(已有两三年的历史,偶尔3D应用程序中的屏幕区域会变得混乱,但在我所经历的范围内没有任何变化)。

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

  • 对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。

+0

我不认为这是一个很好的问题,因为如果它不可能提取到少量的代码。想到的一种可能性是您可能错过了清除深度缓冲区。 –

+0

你超频你的显卡吗?它已经在其他软件中出现问题,所以它可能是罪魁祸首。 CPU也可能过快地向卡发送数据,导致一些数据被破坏。尝试降低CPU的时钟速度。 – 1201ProgramAlarm

+0

我会尝试创建在单个函数中产生错误的代码。不过,我觉得,鉴于这个bug已经在3个独立的实现中显示出来,并且如此不可预测,所以它是一些潜在的问题,而不是代码中的错误。 (另外我在glClear期间清除深度缓冲区)。 – user573949

回答

3

这看起来像一个破碎的图形卡给我。最可能的问题是内存(内存本身或焊接问题)。如果由于某种原因,设置内存操作的地址在开始读取之前没有完全解决或发生,那么您看到的那些工件可能会发生;这可能是由于GPU和内存之间的连接不良(焊接连接失败)或内存本身故障导致的。

解决方案:购买新的显卡。您可以尝试使用回流工艺解决问题时会发生什么;有一些关于如何做这种DIY的教程,但适当的回流炉可以产生更好的效果。

+0

我相信你是对的,我把这个可执行文件发给了另外两个人,它在他们的机器上完美无缺地工作。看起来像一个新的GPU,然后... – user573949

相关问题