2013-07-11 10 views
9

Attualmente, ho una raccolta di classi RenderObject che contiene una trama, un VAO e un VBO. Disegnare migliaia di questi oggetti comporta una penalizzazione delle prestazioni dovuta all'interruzione dello stato e alle chiamate allo glDrawArrays con un piccolo numero di triangoli.Hai bisogno di un VAO per ogni VBO?

Così ora ho intenzione di cambiare la mia implementazione in modo da creare una serie di VBO 1MiB (iniziare con uno, una volta pieno, creare un secondo VBO da 1MiB e continuare a riempirlo). Ho bisogno di un VAO separato per ogni VBO? Il VBO utilizza già i dati dei vertici interleaved, quindi non sto parlando di utilizzare più VBO per vertici, normali, texture coord, ecc.

risposta

10

Penso che ci possa essere una certa confusione. Attributi vertici si riferisce al numero di elementi per vertice che puoi passare con un singolo vertice (i normali saranno uno, i raggi UV un altro, ecc.). Nella tua implementazione, questo è limitato a 16, che probabilmente non supererai.

I VAO memorizzano le informazioni di stato richieste per emettere una singola chiamata. Ciò include la memorizzazione di quali VBO devono essere associati a quella chiamata. Dato che ogni VBO deve essere disegnato nella propria chiamata di estrazione separata, penso che sia necessario un VAO per memorizzare le informazioni di configurazione per ciascuno.

Ecco una buona spiegazione:

http://ogldev.atspace.co.uk/www/tutorial32/tutorial32.html

+0

Buon punto, grazie, ho rimosso la roba vertici attrib. –

+0

@MarkIngram Lo terrei nella domanda per il bene degli altri lettori. –

+1

Sono praticamente al 100% che un VAO non lega il punto di vincolo VBO (ARRAY_BUFFER_BINDING), se si guarda la pagina della tabella dello stato VAO nel pdf 3.3 core spec, si dice esplicitamente sulla successiva pp "non parte del Stato VAO ". Inoltre, https://twitter.com/id_aa_carmack/status/409495250646753280 controllo https://www.opengl.org/registry/doc/glspec33.core.20100311.withchanges.pdf, controllare pp 281 e 282. Penso che il tutorial che hai linkato funzioni solo perché dà origine al buffer di matrice di elementi che è sempre lo stesso riutilizzato, o perché il buffer di matrice di elementi conserva quale VBO usare, non è sicuro. – Amadiro

Problemi correlati