Ho una semplice applicazione. Ha due thread, ognuno con il proprio contesto di rendering, ma condividono un VBO (funziona, l'ho testato).
Ora quello che voglio: un thread sta visualizzando alcuni dati dalla prima metà del VBO e il secondo thread sta aggiornando la seconda parte del VBO.
Quando non aggiorno il VBO, funziona bene.
Ma ho alcuni strani problemi durante l'aggiornamento. Quando uso glMapBuffer
per aggiornare il VBO (nel secondo thread), nel primo thread, il più delle volte, non viene visualizzato nulla: l'intero schermo è chiaro (dopo una glClear
chiamata). Sembra che non possa toccare i dati dal VBO (questo è comprensibile, perché l'intero buffer è mappato e quindi può essere bloccato in qualche modo).
Ho provato a usare glMapBufferRange
, che usa GL_MAP_UNSYNCHRONIZED_BIT
. Questo dovrebbe significare "non aspettare e usare il VBO come vuoi, io (il programma) lo sincronizzerò da solo". Inoltre, quando eseguo il mapping di una gamma di VBO e il rendering dei dati da un'altra parte, non dovrebbe essere in attesa, ma sto riscontrando gli stessi problemi con cui mi trovo glMapBuffer
.
Qualcuno può aiutarmi a risolvere questo problema o spiegare perché succede?