【问题标题】:OpenGL window draws fine, but all the windows on top of my OpenGL window go blackOpenGL 窗口画得很好,但我的 OpenGL 窗口顶部的所有窗口都变黑了
【发布时间】: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)。如果我没记错的话,事实证明它有时会在没有先定义后台缓冲区并向其绘制任何内容的情况下交换缓冲区。以前对我来说并不明显,因为这是一个很长的例程。我还需要清理其他一些小问题,但我认为这是主要原因。

【问题讨论】:

  • 如果没有看到相关代码,任何人都很难回答。
  • 不幸的是,这是一个很长的例程,无论如何我都不会被允许在这里发布。
  • 那么,如果您没有得到太多帮助,请不要感到惊讶。

标签: opengl motif


【解决方案1】:

您是如何创建 OpenGL 窗口/上下文的。您是否刚刚获得了 Motif 主窗口的 X11 窗口句柄并在该窗口上创建了 OpenGL 上下文?或者您是否在该 Motif 窗口中为 OpenGL 创建了自己的子窗口?

您不应该使用任何由工具包直接管理的窗口,除非这是一些供 OpenGL 独占使用的小部件。原因是,大多数工具包并没有为每个元素创建自己的子窗口,并且还重用了部分图形资源。

因此,您应该为 OpenGL 创建一个自己的子窗口,并可能还使用 glXCreateWindow 创建一个子窗口。

【讨论】:

  • 不完全是子窗口,而是在主窗口中创建了一个 XmForm 以包含 glwMDrawingArea 和其他内容。该表单的 Display 是 GLXContext 的父级。
  • (抱歉。请输入关键问题。:) )不完全是子窗口,而是在主窗口中创建了一个 XmForm(称为 glForm)来包含 glwMDrawingArea ,仅此而已。该表单的 Display 是 GLXContext 的父级。现在 glForm 包含在主窗口中,其中包含另一个严格的 Motif 表单(称为motifForm)。重绘motifForm没有任何问题。如果我真的需要将 glForm 放在它自己的窗口中,那将是一个问题。需要将motifForm和glForm保持在同一个窗口中。
  • 叹息。当我说“是 GLXContext 的父级”时,我应该说“是 GLXContext 的显示”。
  • @user1789943:我不是指顶级窗口。我的意思是一个非常自己的 X11 窗口,它可以在另一个窗口中完美地作为父级,即包含在另一个窗口中。
  • 我不知道你是否发现我正在使用 glwMDrawingAreaWidget。这是否已经防止了您提到的任何问题?或者用 GLXWindow 替换它会更好吗?感谢您迄今为止的所有帮助。
【解决方案2】:

这是一个老问题,我知道,但答案可能对其他人有所帮助。

这听起来像是您为 OpenGL 窗口选择了一个糟糕的视觉效果,或者您正在创建一个覆盖默认值的新颜色图。如果可能,请为应用程序中的所有内容选择 DirectColor 24 平面视觉效果。 DirectColor 视觉效果使用只读颜色单元,但 24 个平面将允许每个窗口都可以使用每种支持的颜色,而无需覆盖颜色单元。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    相关资源
    最近更新 更多