在窗口的特定区域中创建GLX上下文

时间:2009-08-15 02:06:34

标签: x11 drawable glx

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

例如,GLUT为此行为提供了一个函数。 GTK +或QT等主要工具包也提供GL小部件,它们只是X窗口的子区域。但是我需要在低级别工作。

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

GLX reference (Blue Book)

编辑:添加了很棒的赏金!

2 个答案:

答案 0 :(得分:2)

你只能glXMakeCurrent()一个X Drawable,而不是它的一个子部分,但是你的解决方案很简单:停止考虑X窗口就像它是你的应用程序一样。每个X应用程序通常由10个或100个X窗口组成。在您想要的区域中创建一个子窗口并将其绘制到其中。

或者,你可以创建一个像素图,渲染到它,然后复制到窗口的一个区域,但那会慢一些。

答案 1 :(得分:1)

我在BSD manpage

中找到了这条有用的信息
  

在几乎所有对您来说都很重要的方面,子窗口就像一个顶级窗口。它有一个窗口ID;它有自己的一组事件回调;你可以渲染它;你被告知它的创建; ...

     

子窗口位于其他窗口内(可能是顶级窗口,可能是另一个子窗口)。因此,它通常只与您自己创建的其他窗口交互,因此它不受窗口管理器的影响。这是它与顶级窗口的差异的主要来源:

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