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