ฉันสงสัยว่าสถานะใดที่เก็บไว้ใน OpenGL VAO ฉันเข้าใจว่า VAO มีสถานะที่เกี่ยวข้องกับข้อมูลจำเพาะของจุดยอดของจุดยอดบัฟเฟอร์ (แอตทริบิวต์ใดที่อยู่ในบัฟเฟอร์และบัฟเฟอร์ใดถูกผูกมัด ... ) เพื่อให้เข้าใจการใช้ VAO ที่ถูกต้องได้ดีขึ้นฉันต้องการทราบว่าพวกเขามีสถานะเป็นอย่างไร
ฉันควรใช้ VAO อย่างไร
จากตัวอย่างง่ายๆฉันเข้าใจว่าการใช้งาน VAO ที่ถูกต้องมีดังนี้:
ติดตั้ง
Generate VAO
BindVAO
---- Specify vertex attributes
---- Generate VBO's
---- BindVBO's
-------- Buffer vertex data in VBO's
---- Unbind VBO's
Unbind VAO
การกระทำ
Bind VAO
---- Draw
Unbind VAO
จากนี้ฉันคิดว่าอย่างน้อยการผูกบัฟเฟอร์จุดสุดยอดและข้อมูลจำเพาะคุณลักษณะจุดสุดยอดจะถูกเก็บไว้ใน VAO ฉันไม่แน่ใจว่ารูปแบบการใช้งานนี้จะขยายไปสู่สถานการณ์ที่มีพื้นผิว (หลาย) และโปรแกรม Shader (หลายรายการ) ได้อย่างไร เป็นโปรแกรมที่ใช้งาน Shaderเก็บไว้ใน VAO? และการผูกพื้นผิว (ด้วยการตั้งค่าการสุ่มตัวอย่าง / การห่อ ) ใน VAO ด้วยหรือไม่ เหมือนกันสำหรับเครื่องแบบ ?
ดังนั้นคำถามของฉันคือ:
- อะไรที่แน่นอนรัฐถูกเก็บไว้ในOpenGL VAO ? (การผูก VBO, ข้อกำหนดคุณลักษณะ, โปรแกรม shader ที่ใช้งาน, การเชื่อมพื้นผิว, การตั้งค่าการสุ่มตัวอย่าง / การห่อพื้นผิว, เครื่องแบบ ... ?)
- ฉันจะใช้ VAO อย่างถูกต้องในการตั้งค่าการเรนเดอร์ที่ซับซ้อนมากขึ้นได้อย่างไรที่มีพื้นผิว (หลาย) ที่มีการตั้งค่าการสุ่มตัวอย่าง / การห่อที่เกี่ยวข้อง (หลาย) โปรแกรม shader และชุดเครื่องแบบเกี่ยวข้อง