En todos los tutoriales que puedo encontrar sobre VAO (Vertex Array Objects), muestran cómo usarlos configurando atributos de vértice y vinculando un VBO (Vertex Buffer Object). Pero quiero crear un VAO que se configure para un conjunto de VBO en combinación con un sombreador fijo, donde cada búfer use el mismo patrón de datos (vértice, uv, color, etc.). Por lo tanto, quiero crear un VAO para varios VBO que se dibujarán con un sombreador.
No pude encontrar ninguna demostración de esto, así que decidí probarlo. Pero no funciona y se bloquea en la glDrawArray
llamada. Parece que el VBO no está vinculado. Aquí está el código que estoy usando:
Representación:
/* 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);
Creación de 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);
Donde ls
es un simple struct
que contiene las ubicaciones de los atributos.
En la parte de Renderizado, intercambiar el glBindBuffer
y el glBindVertexArrayOES
entorno tampoco funcionó.
Entonces, la pregunta es: ¿es posible hacerlo, o tendré que crear un VAO para cada búfer? Y si tengo que crear un VAO para cada VBO, ¿es posible actualizar los datos del VBO glBufferSubData
en combinación con un VAO?