是什么导致了这个不可预测的OpenGL错误?
What's causing this unpredictable OpenGL bug?
我有一个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,但一个合适的回流炉会得到更好的效果。
- C++atioglxx.pdb未加载错误glBufferData OpenGL
- OpenGL 4.3 错误地将第 4 个纹理坐标映射到与第 3 个纹理坐标相同的位置
- 现代OpenGL和GLEW Libraray的编译错误
- GLFW DDS 加载函数的 OpenGL 链路错误
- MSVC __debugbreak() 与 openGL 错误回调一起使用时不会产生调用堆栈
- 当我在网格/面中实现索引时,为什么它会返回OpenGl错误
- 在运行时处理 OpenGL 错误
- glewinit()失败和OpenGL错误1282
- opengl错误:GLTest.exe中0x0251D09F(ig4dev32.dll)处未处理的异常:0xC00000
- 当解除UIViewController时,cocos2dx OpenGL错误0x0506
- OpenGL错误只在未经调试的情况下运行时出现,怎么可能呢
- 正在构建lms套装,OpenGL错误
- Qt OpenGL 错误'_imp_gl...'
- 在 Visual Studio 2010 中使用 OpenGL - 错误 LNK2019:函数___tmainCRTSt
- Opengl错误C0000编译错误
- 调用 glTexSubImage2D 时'invalid value' OpenGL 错误
- 是什么导致了这个不可预测的OpenGL错误?
- OpenGL错误1281片段着色器(仅通过使用块接口)
- 未知的OpenGL错误
- c++ OpenGL错误的Collada纹理坐标