Mam prostą aplikację. Ma dwa wątki, każdy z własnym kontekstem renderowania, ale mają one jeden VBO (to działa, przetestowałem to).
Teraz chcę: jeden wątek wyświetla niektóre dane z pierwszej połowy VBO, a drugi wątek aktualizuje drugą część VBO.
Kiedy nie aktualizuję VBO, działa dobrze.
Ale mam kilka dziwnych problemów podczas aktualizacji. Kiedy używam glMapBuffer
do aktualizacji VBO (w drugim wątku), w pierwszym wątku przez większość czasu nic nie renderuje - cały ekran jest czysty (po glClear
wywołaniu). Wygląda na to, że nie może dotknąć danych z VBO (jest to zrozumiałe, ponieważ cały bufor jest zmapowany, więc można go jakoś zablokować).
Próbowałem użyć glMapBufferRange
, który wykorzystuje GL_MAP_UNSYNCHRONIZED_BIT
. Powinno to oznaczać: „nie czekaj i używaj VBO tak, jak chcesz, ja (program) zsynchronizuję go sam”. Ponadto, kiedy mapuję zakres VBO i renderuję dane z innej części, nie powinno to czekać, ale mam te same problemy, co ja glMapBuffer
.
Czy ktoś może mi pomóc to naprawić lub wyjaśnić, dlaczego tak się dzieje?
źródło