簡體   English   中英

Qt和OpenGL,使用一個上下文處理多個小部件

[英]Qt and OpenGL, using one context for multiple widgets

我最近問了一個問題,即如何解決在多個上下文中與頂點數組對象和幀緩沖區對象共享問題的問題,然后我深信使用多個上下文只會比解決方案引起更多的麻煩。

我正在使用Qt,當前的設置是我有一個不可見的QGLWidget,然后在可見的QGLWidget的構造函數中使用它來共享資源,這很好地接受了我無法在上下文中共享某些內容的想法。

我希望找到一種解決方案,在其中我可以使用單個上下文來呈現所有不同的小部件, 此問題是指使用QGLWidget構造函數,該方法在您希望共享的QGLContext中傳遞,但是似乎並沒有使用一個常見的上下文,但是將上下文設置為由一個QGLWidget使用,當您嘗試在第二個窗口小部件上使用它時,將調用qWarning,它通知您QGLContext必須引用您要傳遞給它的窗口小部件。

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

理想情況下,我希望保持目前的設計,即使用一個可通過選項卡進行導航的統一游戲編輯器,而不是為編輯器的每個部分使用單獨的程序。

唯一看起來不錯的解決方案是使用QGraphicsView並將QGLWidget設置為視口,但是這似乎根本不起作用。 我可以渲染基本圖元,但是無論如何,它都會崩潰。

有沒有人有處理這個問題的經驗,如果有的話,您能否解釋一下實現目標的過程?

我不太了解您為什么遇到這么多麻煩,我正在構建一個類似CAD的應用程序,因此需要共享一些上下文,例如:

  • 我將應用程序范圍內的隱藏QGLWidget用作主窗口類的成員,這是上下文着色器的加載方式。
  • 對於每個文檔窗口,窗口類都有一個隱藏的QGLWidget成員,這是上下文幾何的加載對象。着色器上下文用作其“共享”窗口小部件,允許文檔訪問應用程序范圍的着色器。
  • 每個文檔窗口中的5個視口中的每一個都是可見的QGLWidget ,這是實際渲染的地方。 文檔窗口幾何圖形QGLWidget用作“共享”窗口小部件,因此視口可以訪問文檔范圍的幾何數據和應用程序范圍的着色器。

共享的小部件參數允許您創建上下文的“繼承”樹,每個上下文都可以訪問它自己的及其所有祖先數據(但不能訪問其子級或兄弟級)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM