【发布时间】:2012-10-31 23:26:42
【问题描述】:
我有一个混合了 OpenGL 和 Motif 的应用程序。包含 OpenGL 的大主窗口可以重新绘制。但是,坐在它上面的子窗口都变黑了。具体来说,只是那些位于主窗口顶部的子窗口的一部分。这些子窗口都只有 Motif 代码(除了一个)。
应用不会冻结或转储核心。数据仍在流动,随着文本字段等各种子窗口的更新,这些部分会重新绘制。相互拖动窗口或最小化/取消最小化也会触发重绘。 “停电”的时间是随机的。我每次都运行相同的 1 小时数据集,有时会在运行 5 分钟后发生停电,有时会在运行 30 分钟后发生,等等。
我经历了关闭部分代码的过程,直到问题停止。越来越窄,发现它与使用深度缓冲区有关。换句话说,当我注释掉glEnable(GL_ENABLE_DEPTH_TEST) 时,问题就消失了。所以问题似乎与深度缓冲区的使用有关。
据我所知,在重绘完成之前,深度缓冲区已被清除,这是理所当然的。 glClear 调用周围有 if 语句,因此我将消息放在那里并确认深度缓冲区的 glClear 确实发生了,即使发生停电也是如此。此外,glGetError 没有返回任何内容。
2014 年 6 月 30 日更新 看起来至少还有一个人在看这个(感谢 UltraJoe)。如果我没记错的话,事实证明它有时会在没有先定义后台缓冲区并向其绘制任何内容的情况下交换缓冲区。以前对我来说并不明显,因为这是一个很长的例程。我还需要清理其他一些小问题,但我认为这是主要原因。
【问题讨论】:
-
如果没有看到相关代码,任何人都很难回答。
-
不幸的是,这是一个很长的例程,无论如何我都不会被允许在这里发布。
-
那么,如果您没有得到太多帮助,请不要感到惊讶。