J'ai une application simple. Il a deux threads, chacun avec son propre contexte de rendu, mais ils partagent un VBO (cela fonctionne, je l'ai testé).
Maintenant, ce que je veux: un thread rend certaines données de la première moitié du VBO et le deuxième thread met à jour la deuxième partie du VBO.
Quand je ne mets pas à jour le VBO, ça fonctionne bien.
Mais j'ai des problèmes étranges lors de la mise à jour. Lorsque j'utilise glMapBuffer
pour mettre à jour le VBO (dans le deuxième fil), dans le premier fil, la plupart du temps, cela ne rend rien - tout l'écran est clair (après un glClear
appel). Il semble qu'il ne puisse pas toucher aux données du VBO (cela est compréhensible, car tout le tampon est mappé et peut donc être verrouillé d'une manière ou d'une autre).
J'ai essayé d'utiliser glMapBufferRange
, qui utilise GL_MAP_UNSYNCHRONIZED_BIT
. Cela devrait signifier "n'attendez pas et utilisez le VBO comme vous le souhaitez, je (le programme) le synchroniserai par moi-même". De plus, lorsque je mappe une gamme de VBO et rend des données d'une autre partie, cela ne devrait pas attendre, mais je rencontre les mêmes problèmes que moi glMapBuffer
.
Quelqu'un peut-il m'aider à résoudre ce problème ou à expliquer pourquoi cela se produit?