ในแบบฝึกหัดทั้งหมดที่ฉันพบเกี่ยวกับ VAO (Vertex Array Objects) พวกเขาแสดงวิธีการใช้พวกเขาโดยการกำหนดค่าคุณลักษณะจุดสุดยอดและผูก VBO (Vertex Buffer Object) แต่ฉันต้องการสร้าง VAO ที่จะกำหนดค่าสำหรับชุด VBO's ร่วมกับ shader คงที่ซึ่งแต่ละบัฟเฟอร์ใช้รูปแบบข้อมูลเดียวกัน (จุดยอด, UV, สี, ฯลฯ ) ดังนั้นฉันต้องการสร้างหนึ่ง VAO สำหรับ VBO หลายรายการที่จะถูกวาดโดยใช้หนึ่ง shader
ฉันไม่พบตัวอย่างใด ๆ เกี่ยวกับเรื่องนี้ดังนั้นฉันจึงตัดสินใจลองทำดู แต่มันไม่ทำงานและล้มเหลวในการglDrawArray
โทร ดูเหมือนว่า VBO จะไม่ถูกผูกไว้ นี่คือรหัสที่ฉันใช้:
การแสดงผล:
/* 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);
การสร้าง 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);
ที่ไหนls
เป็นแบบง่ายstruct
ที่เก็บตำแหน่งแอตทริบิวต์
ในส่วนของการเรนเดอร์การสลับglBindBuffer
และglBindVertexArrayOES
รอบ ๆ ใช้ไม่ได้
ดังนั้นคำถามคือ: มันเป็นไปได้ที่จะทำเช่นนั้นหรือฉันจะต้องสร้าง VAO แต่ละบัฟเฟอร์หรือไม่ และถ้าฉันต้องสร้าง VAO สำหรับแต่ละ VBO เป็นไปได้หรือไม่ที่จะอัปเดตข้อมูล VBO ที่ใช้glBufferSubData
ร่วมกับ VAO