【发布时间】:2015-05-04 13:31:49
【问题描述】:
我在使用 OpenGL 应用程序“A”(用 C++ 编写)时遇到以下问题: 在切换到不同的窗口“B”(同一应用程序的子窗口或完全不同的应用程序)然后切换回“A”后,所有 OpenGL 渲染都被限制在“A”覆盖的区域B'。
- 在最小化和重新最大化窗口“A”后问题就消失了
- 该问题仅出现在单台 Windows 7 机器上。在许多其他机器(Windows 和 Linux)上进行测试时,一切正常。将图形驱动程序更新到最新版本也没有帮助。
是否有明显的编码错误会导致这种行为?
调试此类错误的好方法是什么?
【问题讨论】:
-
在大多数情况下,这不应该是由绳索引起的错误。根据您的测试,此问题仅发生在一台机器上。机器配置是什么?
-
可能在应用程序 A 被激活时重置
glViewport会起作用 -
我敢打赌,驱动程序有问题/坏/错误……这是 Intel 还是 ATI?英特尔在每个应用程序的多个 Opengl 上下文方面存在很大问题,并且 ATI(AMD) 卡驱动程序对应用程序中的内存泄漏极为敏感。对于英特尔,您很不走运(尽可能切换到 GDI),对于 ATI 调试或更改某些有时会有所帮助的 gl 调用的顺序,最重要的是更新驱动程序 **添加有关您的应用程序做什么/使用什么操作系统的更多信息是 GL/GLSL 什么版本,兼容性/核心配置文件等等 ** 类似于 stackoverflow.com/q/19099162/2521214 但我没有得到答案也没有 cmets :(
-
还要确保您的窗口在 OnActivate、OnResize 等事件中更改当前 GL 上下文...并在关闭之前将其设置为 NULL ...
-
好吧,我可以想象一个应用程序错误会导致这种行为的奇怪场景,例如在某些情况下,由于前面的另一个窗口,某些区域的像素所有权测试失败,结合一些特定的每像素测试,如模板测试或深度测试的奇怪用法。但是,尽管这个问题提出的含糊不清,但几乎不可能给出有用的建议。但是,有一件事:检查该机器上的 Windows“Aero”桌面合成器是否已关闭,甚至可以切换它并检查它是否有任何不同。