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 glDrawArraychiamata. 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'è lsun semplice structche contiene le posizioni degli attributi.
Nella parte Rendering, anche lo scambio di glBindBuffere glBindVertexArrayOESdintorni 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 glBufferSubDatain combinazione con un VAO?