У меня есть простое приложение. У него есть два потока, каждый со своим собственным контекстом рендеринга, но они совместно используют один VBO (это работает, я проверял это).
Теперь то, что я хочу: один поток рендерит некоторые данные из первой половины VBO, а второй поток обновляет вторую часть VBO.
Когда я не обновляю VBO, он работает нормально.
Но у меня есть некоторые странные проблемы при обновлении. Когда я использую glMapBuffer
для обновления VBO (во втором потоке), в первом потоке большую часть времени он ничего не рендерит - весь экран чист (после glClear
вызова). Похоже, что он не может касаться данных из VBO (это понятно, потому что весь буфер сопоставлен, и поэтому его можно как-то заблокировать).
Я пытался использовать glMapBufferRange
, который использует GL_MAP_UNSYNCHRONIZED_BIT
. Это должно означать: «не ждите и используйте VBO, как хотите, я (программа) синхронизирую его сам». Кроме того, когда я отображаю диапазон VBO и визуализирую данные из другой части, это не должно ждать, но у меня возникают те же проблемы, что и у меня glMapBuffer
.
Кто-нибудь может мне помочь исправить это или объяснить, почему это происходит?
источник