2009-08-15 34 views
1

我想在窗口内用GLX创建OpenGL上下文。但是,我不希望它跨越整个窗口区域。相反,它只应该涵盖一个分区域。在窗口的特定区域创建GLX上下文

例如,GLUT提供针对此行为的函数。另外,像GTK +或QT这样的主要工具包提供了GL窗口小部件,它们只是X窗口的子区域。不过,我需要低层工作。

glXMakeCurrent()接受一个X可绘制标识符。是否可以将Drawable定义为窗口的子区域?或者还有其他方法将上下文绑定到窗口区域?

GLX reference (Blue Book)

编辑:新增真棒赏金!

回答

1

我发现在BSD manpage这是很有帮助的一条信息:

几乎在每一个方面表明对你很重要,一个子窗口就像是一个顶层窗口。它有一个窗口ID;它有自己的一组事件回调;你可以渲染它;你被通知它的创作; ...

子窗口生活中的一些其他窗口(可能是顶层窗口,可能是另一个子窗口)内。正因为如此,它通常只与您自己创建的其他窗口进行交互,因此它不受窗口管理器的限制。这是它与顶级窗口差异的主要来源:

因此,我假设流行工具包中的GL窗口小部件实际上也作为独立(子)窗口行事。有趣的部分是,这对窗口管理器是透明的,因此对用户来说是透明的。

2

你只能glXMakeCurrent()的X绘制对象,而不是它的款,但是你的解决方法很简单:停止思考的X窗口,如果它是你的应用程序。每个X应用程序通常由10或100个X窗口组成。在您想要的区域创建一个子窗口并将其绘制到其中。

或者,你可以创建一个像素图,呈现了进去,然后复制到窗口的面积,但是这将是慢。

+0

如何创建真正不是顶级窗口的根窗口的子窗口? – ypnos 2009-09-22 00:00:28

+0

你为什么想这样做?你说过:“我想在窗口内用GLX创建一个OpenGL上下文,但是我不希望它覆盖整个窗口区域,而应该只覆盖一个子区域。” 因此,您有一个顶级窗口,以root身份作为父级,然后使用此顶级窗口作为父级创建一个新窗口,并将其置于所需的任何“子区域”中。 – 2009-09-23 18:47:21

相关问题