In tutti i tutorial che posso trovare su VAO (Vertex Array Objects), mostrano come usarli configurando gli attributi dei vertici e associando un VBO (Vertex Buffer Object). Ma voglio creare un VAO che verrà configurato per un set di VBO in combinazione con uno shader fisso, in cui ogni buffer utilizza lo stesso modello di dati (vertice, uv, colore, ecc.). Quindi, voglio creare un VAO per più VBO che verranno disegnati usando uno shader.
Non ho trovato alcuna demo su questo, quindi ho deciso di provarlo. Ma non funziona e si blocca durante la glDrawArray
chiamata. Sembra che il VBO non sia vincolato. Ecco il codice che sto usando:
Rendering:
/* Prepare vertex attributes */
glBindVertexArrayOES(vao);
/* Upload the buffer to the GPU */
glBindBuffer(GL_ARRAY_BUFFER, pool->next());
glBufferSubData(GL_ARRAY_BUFFER, 0, parts * buffer.stride() * 6, buffer.getBuffer());
/* Draw the triangles */
glDrawArrays(GL_TRIANGLES, 0, parts * 6);
glBindVertexArrayOES(0);
Creazione VAO:
glBindVertexArrayOES(vao);
glEnableVertexAttribArray(ls.position);
glVertexAttribPointer(ls.position, 2, GL_FLOAT, GL_FALSE, buffer.stride(), 0);
glEnableVertexAttribArray(ls.color);
glVertexAttribPointer(ls.color, 3, GL_FLOAT, GL_FALSE, buffer.stride(), GL_BUFFER_OFFSET(buffer.dataTypeSize * 2));
glBindVertexArrayOES(0);
Dov'è ls
un semplice struct
che contiene le posizioni degli attributi.
Nella parte Rendering, anche lo scambio di glBindBuffer
e glBindVertexArrayOES
dintorni non ha funzionato.
Quindi, la domanda è: è anche possibile farlo, o dovrò creare un VAO per ciascun buffer? E se devo creare un VAO per ciascun VBO, è possibile aggiornare i dati del VBO utilizzando glBufferSubData
in combinazione con un VAO?