2015-11-07 125 views
0

我想用新的QOpenGLWidget(出現在Qt 5.4中)使用GLEW。雖然我可以很容易地使用舊的QGLWidget,但似乎新的QOpenGLWidget/QOpenGLContext類與GLEW不能很好地協作(我沒有選擇,我正在使用一個使用GLEW的外部庫)。我有以下問題:與Qt 5.4一起使用glew QOpenGLWidget

  1. 有一個編譯時警告(在qopenglfunctions.h觸發 GLEW_H定義時),由於它是由QOpenGLContext
  2. 包括我不能避免包括 qopenglfunctions.h (不知道它是相關的)在我的應用程序中,當我嘗試使OpenGL上下文成爲當前時,它導致整個 的黑色窗口出現
  3. (不確定它是相關的)應用程序(我在應用程序中有幾個QOpenGLWidgets,並且 需要更改上下文,因爲我是使用OpenGL顏色剪裁)

我想擺脫警告,以確定2.和3.是否與GLEW/QOpenGLWidget不兼容有關。

注意:關於Stackoverflow上的Qt5/GLEW已經有幾個問題,但它們都與(舊的)QGLWidget相關,這些問題的表現完全不同(使用相同的代碼/應用程序沒有問題)。

代碼庫位於:https://gforge.inria.fr/frs/?group_id=1465(太大,包括在這裏,並且由於長的,我不能讓你看看吧,萬一你想知道)

+0

我會感興趣的評論,通常與-1 :-) – BrunoLevy

回答

0

我能夠解決所有的問題如下(是的!):

  1. 與makeCurrent()黑色窗口:我試圖用 QOpenGLContext :: makeCurrent(表面*),它需要一個表面*作爲 的說法,我沒有正確的。現在我正在使用 QOpenGLWidget :: makeCurrent()(將右邊的Surface *傳遞給 上下文);
  2. OpenGL的堆棧矩陣溢錯誤:這一次是更棘手的,這是因爲我的OpenGL渲染功能時,我被顯示在一個QTextEdit一些文本組件的第一次,這是造成類似OpenGL上下文切換,這是重置堆棧矩陣。通過對文本的更新進行排隊並在OpenGL渲染函數之外處理它們來修復它;
  3. 警告由於QT/glew.h:這個是比較容易的,因爲我不再使用QOpenGLContext(我做的使用QOpenGLWidget上下文切換),我不再需要包括QtOpenGL頭,並有不再衝突。