2009-08-15 37 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

相關問題