2012-11-08 38 views
1

一個方面,我最近問了一個關於如何解決跨多個環境頂點數組對象和幀緩衝對象共享問題的問題,我當時確信,使用多個上下文只是造成更多的麻煩則解決方案。的Qt和OpenGL,使用多個小部件

我正在使用Qt,目前我的設置是我有一個隱形QGLWidget,然後在我的可見QGLWidget的構造函數中使用,以便共享資源,這非常有效,我無法在上下文中共享某些內容。

我想找到我在哪裏能夠使用單個上下文來渲染我的所有不同的widget的一個解決方案,this question是指通過使用自己的QGLContext傳遞你的願望將被共享的QGLWidget來繪圖構造,然而,這並不似乎使用一個共同的上下文,而是設置上下文以供一個QGLWidget使用,當您嘗試在第二個小部件上使用它時,會調用qWarning,通知您QGLContext必須引用您傳遞給它的小部件。

我的應用程序的目標是有2個獨立的GUI呈現不同的場景,但共享相同的上下文。目前,我有一個「世界」編輯器,它編輯一個場景並將其保存到我的遊戲引擎中使用的文件中,並且我還有一個「材質」編輯器,它允許您以圖形方式編輯類似於UDK材質編輯器的材質,是一個利用OpenGL的預覽窗口。

理想情況下,我希望保持目前的設計,即擁有一個可通過製表符導航的統一遊戲編輯器,而不是爲編輯器的每個部分分別製作程序。

,似乎就像是一個體面的解決辦法是使用的QGraphicsView和設置QGLWidget來繪圖視口的唯一的事情,但是這似乎並沒有在所有的工作。我可以渲染基本的基本圖形,但是更多的是它會分崩離析。

有沒有人有處理這個問題的多個OpenGL小部件的經驗,如果是的話,你可以解釋一下你爲達到目標而採取的過程嗎?

+0

我不斷使用QGraphicsView,它實際上效果很好。它有什麼問題? –

+0

我簡單地用QGraphicsScene創建一個QGraphicsView,然後將QGraphicsView視口設置爲我的派生QGLWidget,如果我在我的QGLWidget的繪製函數中渲染基本基元,但是當我嘗試使用着色器渲染某些東西時它不起作用,當我註釋掉行並用我的QGLWidget替換QGraphicsView小部件時,一切再次正常工作,它似乎與圖形視圖一起使用它會導致它死亡 – user1294021

+0

它實際上阻止了我的其他QGLWidgets工作以及 – user1294021

回答

1

我不明白爲什麼你有這麼多的麻煩,我建立一個類似CAD的應用程序,以便分享一些情境,像這樣:

  • 我使用一個應用程序範圍內隱QGLWidget作爲我的主要窗口類的成員,這是着色器中加載的上下文。
  • 對於每一個文檔的窗口,窗口類具有隱蔽QGLWidget構件,這是上下文幾何形狀中加載。着色器上下文被用作'共享'小部件,允許文檔訪問應用程序範圍的着色器。
  • 每個文檔窗口中的5個視口中的每一個都是可見的QGLWidget,這是實際渲染髮生的位置。文檔窗口幾何體QGLWidget用作「共享」窗口小部件,因此視口可以訪問文檔範圍的幾何圖形數據和應用程序範圍的着色器。

共享窗口小部件參數允許您創建上下文的「繼承」樹,每個上下文都有權訪問它自己的以及它的所有祖先數據(但不是它的子節點或兄弟節點)。