2012-01-11 6 views
5

Sto rendendo la mia scena costruendo o modificando un buffer che io do a glBufferData. La mia comprensione di Vertex Array Objects è che mi permettono di saltare il binding manuale di tutti i VBO che sto usando. Questo è ancora il caso quando aggiorno il mio buffer tutto il tempo?Devo ricostruire il mio VAO se ho bisogno di cambiare un VBO?

Posso associare il mio VAO, chiamare glBufferData per aggiornare i vertici e gli indici (gli unici due VBO che ho al momento) e quindi renderizzare?

Posso utilizzare la mappatura della memoria con i VBO? Quindi potrei legare VAO, modificare il buffer, quindi renderizzare?

Che cosa fa esattamente il VAO? La sua funzione è semplicemente quella di una scorciatoia che memorizza e automatizza l'associazione degli attributi dei vertici ai miei VBO? Assume la proprietà dei dati o dei binding?

risposta

3

Probabilmente dovresti testarlo, ma dalla mia comprensione i VBO ricevono ID quando generati e un VAO si riferisce solo ad ogni vertice di attributo insieme all'ID VBO che sta utilizzando. Dovresti essere in grado di chiamare glBufferData o glBufferSubData. Non sono sicuro che la mappatura della memoria appena prima della chiamata dell'estrazione funzionerebbe, ma si potrebbe certamente fare qualcosa tra l'associazione del VAO e il disegno. Un VAO non blocca i VBO o ne limita l'accesso.

In generale, un VAO memorizza solo gli attributi e tutte le loro impostazioni (VBO associato, passo, offset, ecc.) E associa automaticamente gli attributi quando associati. Finché non si chiama glBindVertexArray(0);, tutti gli attributi dei vertici sono legati al VAO associato.

+0

Quindi il VAO non influisce su quale VBO ho associato? Avrò bisogno di legarli e chiamare 'glBufferData' su di loro. –

+0

@Robert Rouhani Considerando che il layout del vertice è identico per la maggior parte delle estrazioni, trovo abbastanza ridicolo che tu debba memorizzare un diverso set di attributi vertici per ciascun VBO. Ho cercato un po 'di tempo per cercare di evitare questo, ma non sono arrivato da nessuna parte. – Zebrafish

+0

@TitoneMaurice La quantità di spazio occupato dovrebbe essere minima (nell'ordine dei byte), le chiamate extra GL per associare diversi attributi non dovrebbero essere il collo di bottiglia. La cosa più vicina che vorresti è istanziare, qualsiasi altra cosa sarebbe inutile/ottimizzazione prematura secondo me. –

Problemi correlati