故事
我已经在 OpenGL 中编码大约一年了(在相同的硬件上),而且我最近才得到类似上图中的伪像。它们在短时间内(几分钟)连续运行我的程序后出现,并出现在任何地方:从写字板(见图)到我的桌面和任务栏甚至其他游戏(英雄联盟启动器,它是我的软件渲染器)思考)。
它们可以采用类似于您在图像中看到的任何形式:黑色/白色块或我的应用程序中的纹理块。受影响的应用程序刷新其屏幕后,工件就会消失。
信息
我的应用程序本身看起来很好,没有伪影
我正在使用带有最新驱动程序的 ATI m5800 卡(我有一个 hp elitebook 8540w)、windows 7 64bit 和 Opengl 3.3 或更低版本。
为什么我不发布代码示例?因为(听起来很讨厌)它似乎并不是我的代码中导致工件的特定部分,所以我可以轻松地运行该程序 15 分钟而不会出现问题。我的显卡将加热到 68 摄氏度,并且不会出现伪影。在多次连续运行后开始出现伪影,尽管即使出现伪影,我的视频卡也不会升温超过 68 度。
为什么我在这里发这个?因为我仍然不确定这是由我的代码还是我的硬件/驱动程序引起的,而且我认为从技术角度来看这个问题已经够难了,以至于我只能在其他任何地方得到“购买新的 GC”的答案地方。
我使用了很多 OpenGL,从帧缓冲区和着色器到 3d 纹理、缓冲纹理和纹理数组等等。
据我所知,我的硬件没有受到任何损坏,尽管它是一本精英本,所以很容易过热。
我猜
(当我提到 RAM 时,我指的是显卡上的视频 RAM)
我对 OpenGL 知之甚少,对显卡及其驱动程序知之甚少,但我会尝试解决这个问题,你可以随时击落我。以下是杂乱无章的思路,请随意阅读粗体部分。
我可以在图形工件上找到的所有 Internet 资源都告诉我,我的 RAM 因过热而损坏。
但是,如果是这种情况,那么为什么只有在连续运行后才访问此“坏 RAM”,而在重新启动后才访问?当我的应用程序停止时,我的操作系统不应该清理所有图形内存,重置我的 GC 状态吗?如果我的内存坏了,我的显卡似乎无法跟上我的数据处理速度,并最终在其他所有东西都被“占用”时访问了这块内存。如果 RAM 的故障是基于温度的,那么为什么我可以在 15 分钟内运行我的应用程序一次,但如果温度保持不变,则不能在同一时间段内运行 4 次?
此外,它确实是坏 ram,那为什么我看到我的纹理的一部分?这难道不意味着 RAM 在某一部分工作正常吗?(图片中的蓝色块是我使用的纹理的一部分)
更重要的是:为什么我似乎只在我的应用程序中获得工件,而在其他任何地方都没有?我安装的任何其他应用程序都没有在任何地方产生这些工件!
这表明这不是我的硬件而是我,我做错了什么!(或者 OpenGL 在我的笔记本电脑上做错了,因为大多数游戏可能在 DirectX 上运行)。
现在是最后一部分,这使整个事情成为一个奇迹:我的硬件部分由我的大学资助,这意味着我的一个朋友拥有相同的硬件(真正 100% 相同),并且他没有得到任何运行我的代码的工件。
那么......那是驱动程序错误吗?我的朋友和我运行同一个驱动程序......我完全迷失在这里。
我所能得出的结论是我的 RAM 坏了,除了我和我的应用程序之外,每个人都设法避免了坏的部分。
我想问的是:我是如何得到这些文物的?一些应用程序如何避免它们?硬件/软件发生了什么?
PS:我知道这是一个非常不结构化和混乱的问题,这是因为我已经有一段时间了,并且我试图包含我发现的任何信息。我将感谢任何人可能认为与该主题相关的任何信息,无论是今天还是一年后,如果有任何建议出现,我将很乐意重组这篇文章。我已经搜索了很多关于工件的信息,但大量搜索结果描述了由于代码引起的异常,仅限于相关应用程序,这对我没有什么帮助。这意味着我可能错过了重要的来源,如果您认为我错过了,请链接它们。
与这看起来相反,我只是寻求信息和讨论,而不是直接解决方案,最好的解决方案显然是购买新显卡。
重要来源:诊断显卡问题