我想在窗口中使用GLX创建一个OpenGL上下文。但是,我不希望它跨越整个窗口区域。相反,它应该只涵盖一个次区域。
例如,GLUT为此行为提供了一个函数。 GTK +或QT等主要工具包也提供GL小部件,它们只是X窗口的子区域。但是我需要在低级别工作。
glXMakeCurrent()接受X Drawable标识符。是否可以将Drawable定义为窗口的子区域?或者是否有其他方法将上下文绑定到窗口区域?
编辑:添加了很棒的赏金!
答案 0 :(得分:2)
你只能glXMakeCurrent()一个X Drawable,而不是它的一个子部分,但是你的解决方案很简单:停止考虑X窗口就像它是你的应用程序一样。每个X应用程序通常由10个或100个X窗口组成。在您想要的区域中创建一个子窗口并将其绘制到其中。
或者,你可以创建一个像素图,渲染到它,然后复制到窗口的一个区域,但那会慢一些。
答案 1 :(得分:1)
我在BSD manpage:
中找到了这条有用的信息在几乎所有对您来说都很重要的方面,子窗口就像一个顶级窗口。它有一个窗口ID;它有自己的一组事件回调;你可以渲染它;你被告知它的创建; ...
子窗口位于其他窗口内(可能是顶级窗口,可能是另一个子窗口)。因此,它通常只与您自己创建的其他窗口交互,因此它不受窗口管理器的影响。这是它与顶级窗口的差异的主要来源:
所以我假设流行工具包中的GL小部件实际上也是一个独特的(子)窗口。有趣的是,这对窗口管理器是透明的,因此对用户来说是透明的。