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