我有一個OpenGL程序,需要定期更新紋理。但同時我希望程序能夠響應(特別是繼續運行繪製/顯示代碼),同時更新這些紋理。C++ OpenGL多線程緩衝區資源
但是這似乎是不可能的:如果我讓thread1對移動的紋理執行繪製/顯示代碼和thread2,那麼它們將在資源GL_ARRAY_BUFFER_ARB下發生衝突,因爲thread2必須保留該資源以將某些紋理移動到vbo。我需要GL_ARRAY_BUFFER_ARB來爲thread1繪製/顯示代碼,因爲它使用了不同的vbo。
例如這段代碼
glBindBufferARB(GL_ARRAY_BUFFER_ARB, tVboId);
glBufferDataARB(GL_ARRAY_BUFFER_ARB, numVertices*2*sizeof(GLfloat), texCoords, GL_DYNAMIC_DRAW_ARB);
glBindBufferARB(GL_ARRAY_BUFFER_ARB,0);
會搬過來一些紋理,但它會需要一段時間。在那段時間內,顯示代碼應該運行很多次,但它會崩潰,因爲GL_ARRAY_BUFFER_ARB正在使用中。
我想我可以做一些類似GL_ARRAY_BUFFER_ARB2的事情,但我認爲沒有這樣的事情。