2017-01-11 21 views
-2

有兩個上下文,一個工作者上下文和一個渲染上下文。在設置期間,工作線程創建並設置着色器和VBO。渲染線程然後使用VBO創建一個VAO並繪製它。我在屏幕上沒有任何東西(或舊的頂點,見下文)。具有共享上下文的奇怪openGL行爲,着色器是共享的,VBO有問題

如果我允許渲染線程在創建VAO之前也創建VBO,那麼一切正常,我會看到一個三角形,用工作線程中創建的着色器程序渲染。

真的很奇怪的部分是它工作後,如果我切換回VBO在工作線程創建,我仍然看到三角形,但如果我改變三角形的幾何它不會更新,直到我切換回到在渲染線程中創建VBO。

這是令人難以置信的奇怪。渲染上下文都使用在工作上下文中創建的着色器,但我似乎無法共享VBO,但是當工作上下文創建VBO時,頂點不會更新,並且前一個程序運行的三角形會繪製。

我在Ubuntu 16.這是發生在glew,現在glbinding和我自己編譯的最新glfw3和Ubuntu包以及。

總之,VBO的創建和繪製工作從主線程與從工作線程創建的着色器。如果我嘗試用工作線程(相同的功能)創建一個VBO,我似乎可以訪問一個新的緩衝區,它在渲染線程中使用時會碰到舊數據...

+0

對你單獨做什麼的描述不足以診斷你的問題。 –

+0

@NicolBolas這對於那些有知識的人來說是完全足夠的。我在5分鐘內從一位真正的大師那裏得到了答案。解釋是完美的。 – RobC

+0

「*解釋完美。*」但是你的描述並沒有說你*不是綁定另一個線程中的緩衝區。從你的描述中,我將不得不猜測問題*可能會是什麼。所以不,你的描述不是「完美的」;你的*源代碼*很容易顯示出這個缺陷。 –

回答

0

使用對象只需要綁定它。線程更新(在這種情況下工作線程)的對象必須使用

glFlush();

,以確保更新處理,可用於其他方面。