我有一個着色器類在我的C++/OpenGL3.1/GLSL/Qt的程序。我的程序使用基於不同GLSL源文件的幾個着色器。
我的應用程序可以運行基於該QGLWidget來繪圖執行多種不同的3D渲染,每一個創建自己的着色器。
當我創建我的第一個3d渲染器並初始化着色器時,在glCreateShader & glCreateProgram的幫助下生成着色器ID,沒有任何問題。
問題:
但是,當我創建第二個3D渲染中,OGL功能檢索ID給一模一樣的,但我希望能有新的。這意味着我的兩個渲染器會將數據發送到相同的GPU程序...
很明顯,在GPU程序中,統一變量是混合的,當運行第二個渲染器時,第一個顯示奇怪的渲染。
事實上,當我關閉兩個渲染器之一,所有着色器被殺害......而第二渲染器無法顯示任何內容。
主意?
我完全失去了,我的邏輯推理是glCreateShader & glCreateProgram給ID根據自己的線程ID。 QGLWidget來繪圖運行可能是它自己的線程調用渲染功能,那可就麻煩了持久...
如何解決這個問題的任何想法?
它們是'QGLWidget'還是'QOpenGLWidget'?你還寫了「QGLOpenGL」。前者給出你描述的行爲很可能......? –
我目前使用QGLWidget(這就是我的意思,滑)。 我首先調用'with glFormat'ctor,然後嘗試爲這兩個小部件創建一個上下文,並使用它們各自的上下文和不同的頂級父級(QWidget *動態實例化)調用QGLWidget ctor。我仍然有同樣的問題。 –
我也嘗試使用'QOpenGLWidget'而不是QGLWidget,仍然有兩個不同的父母。在這一點上,它似乎有效,但我的OpenGL窗口小部件在可停靠的窗口小部件中,並且當它們脫離時,它變得很奇怪。看起來不穩定,背景變成黑色,並且沒有在鼠標事件上更新。 –