ฉันเห็นว่า OpenGL เวอร์ชัน 3 ขึ้นไปกำจัดการใช้การเรนเดอร์ฝั่งไคลเอ็นต์ โหมดทันทีถูกตัดออกและดูเหมือนว่าจุดสุดยอดจะถูกยกเลิก แต่ถ้าฉันเข้าใจถูกต้อง VBOs เป็นวิธีหลักในการแสดงจุดยอด
ในขณะที่ฉันเห็นตรรกะเบื้องหลังการมีวิธีที่เหมือนกันในการเรนเดอร์ทุกอย่างมันเป็นกรณีที่ VBOs ไม่มีข้อเสียอย่างใหญ่หลวงในอาร์เรย์ของจุดยอดหรือไม่? ฉันคิดว่า VBO ควรจะเป็นบัฟเฟอร์ขนาดใหญ่ที่มีข้อมูล> 1MB โดยทั่วไป ถ้าฉันมีฉากที่มีรูปทรงเรขาคณิตขนาดเล็กกว่ามาก ฉันมีกราฟฉากที่มีโหนดจำนวนมากโดยแต่ละโหนดต้องการการแปลงของตัวเอง ฯลฯ แต่ละโหนดควรสามารถลบแยกต่างหากเพิ่มลงในแบบแยกต่างหากเป็นต้นฉันใช้อาร์เรย์จุดยอดมาก่อน ดังนั้นคำถามแรกของฉันคือถ้าฉันเปลี่ยนเป็น VBOs จะมีค่าใช้จ่ายมากขึ้นในวัตถุกราฟฉากของฉันตอนนี้เพราะ VBO จำเป็นต้องจัดสรรให้กับแต่ละวัตถุ
สิ่งที่น่ากังวลอีกอย่างคือเรขาคณิตที่ฉันกำลังแสดงนั้นมีความสามารถสูง ในกรณีที่เลวร้ายที่สุดอาจมีบางครั้งที่รูปทรงเรขาคณิตทั้งหมดจำเป็นต้องส่งใหม่ทุกเฟรมในช่วงระยะเวลาหนึ่ง VBOs จะมีประสิทธิภาพการทำงานที่แย่กว่าอาเรย์จุดสุดยอดในกรณีการใช้งานนี้หรือไม่หรือ VBOs ที่แย่ที่สุดจะทำงานได้ดีกว่าอาเรย์ในแนวดิ่ง แต่ไม่มากไปกว่านี้?
ดังนั้นในรูปแบบที่กระชับยิ่งขึ้นคำถามของฉันคือ:
1) มีค่าใช้จ่ายจำนวนมากในการจัดสรร / ยกเลิกการจัดสรร VBOs (ฉันหมายถึงการตั้งค่าบัฟเฟอร์)
2) ถ้าฉันอัปเดตข้อมูลจากซีพียูทุกเฟรมสิ่งนี้จะแย่กว่าถ้าฉันใช้อาร์เรย์จุดยอดหรือไม่?
และสุดท้ายฉันอยากรู้ว่า:
3) หากคำตอบของคำถามใดคำถามหนึ่งข้างต้นคือ "ใช่" ทำไมเลิกใช้โหมดการแสดงผลอื่นที่อาจมีข้อได้เปรียบเหนือ VBOs มีบางอย่างที่ฉันขาดไปเช่นเทคนิคที่ฉันควรจะใช้เพื่อลดต้นทุนการจัดสรรที่อาจเกิดขึ้นเหล่านี้หรือไม่?
4) คำตอบของคำถามเหล่านี้มีการเปลี่ยนแปลงอย่างมากหรือไม่ขึ้นอยู่กับรุ่น OpenGL ที่ฉันใช้ ถ้าฉัน refactor รหัสของฉันเป็น OpenGL 3 หรือ 4 ไปข้างหน้าเข้ากันได้โดยใช้ VBOs ในทางที่เป็นนักแสดงเทคนิคเดียวกันน่าจะทำงานได้ดีกับ OpenGL 2 หรือเป็นไปได้ว่าเทคนิคบางอย่างเร็วกว่า OpenGL 3 มาก + และอื่น ๆ ด้วย OpenGL 2
ฉันถามคำถามนี้เกี่ยวกับการล้นสแต็ก แต่ฉันกำลังโพสต์ที่นี่อีกครั้งเพราะฉันรู้ว่าไซต์นี้อาจเหมาะสมกว่าสำหรับคำถามของฉัน