ด้วย VBOs คุณจะมีข้อดีสองประการ
ข้อได้เปรียบ 1 เกี่ยวข้องกับข้อมูลสแตติกทั้งหมดและมาจากความสามารถในการเก็บข้อมูลจุดสุดยอดของคุณในหน่วยความจำที่เหมาะสมที่สุดสำหรับ GPU
ข้อได้เปรียบ 2 เกี่ยวข้องกับข้อมูลแบบไดนามิกและมาจากความสามารถในการระบุข้อมูลจุดสูงสุดของคุณ ณ เวลาใด ๆ ก่อนที่จะใช้สำหรับการแสดงผลซึ่งสามารถไปป์ไลน์ที่ดีขึ้น
ข้อได้เปรียบประการที่สามมาจากการวาดแบทช์การโทร แต่ยังแชร์กับอาร์เรย์จุดสุดยอดของโรงเรียนเก่าด้วยดังนั้นฉันจึงไม่ได้โทรออกโดยเฉพาะสำหรับ VBOs การส่งข้อมูลไปยัง GPU (หรือการใช้ข้อมูลที่มีอยู่แล้วใน GPU) นั้นคล้ายคลึงกันในหลาย ๆ ทางสำหรับดิสก์ I / O และปริมาณการใช้เครือข่าย - ถ้าคุณมีแบทช์ขนาดใหญ่สองสามอัน
ที่ดี (ไม่ถูกต้อง 100% แต่เพียงพอที่จะช่วยให้คุณมีความคิด) การเปรียบเทียบนี้คือถ้าคุณเป็นคนขับรถบัสที่ต้องพาคน 50 คนจากเมืองหนึ่งไปอีกเมืองหนึ่ง คุณสามารถโหลดมันทีละครั้งและทำการเดินทาง 50 ครั้ง - นั่นคือ glBegin / glEnd อีกทางเลือกหนึ่งคือคุณสามารถวางพวกมันทั้งหมด 50 ตัวบนรถบัสและออกเดินทางเพียงครั้งเดียว - นั่นคือการรวมกันของอาร์เรย์ที่มีจุดสุดยอดหรือ VBOs (ในกรณี VBO ที่ 50 คนจะอยู่บนรถบัส;)
สิ่งนี้มาในราคาและนี่คือราคาที่คุณสูญเสียความสามารถในการระบุข้อมูลจุดสุดยอดเป็นและเมื่อคุณต้องการ เอาล่ะคุณสามารถทำได้ (ด้วยการทำงานเพิ่มเติม) แต่คุณจะไม่ได้รับประสิทธิภาพเต็มที่จากโค้ดของคุณ แต่คุณต้องคิดเกี่ยวกับข้อมูลจุดสุดยอดของคุณวิธีการใช้วิธี (และถ้า) ต้องได้รับการอัปเดตหรือไม่ภาพเคลื่อนไหวใด ๆ ที่สามารถทำได้ใน shader (ดังนั้นการเปิดใช้งานข้อมูลจะคงที่ - VBOs ต้องการ shaders สำหรับ กรณีภาพเคลื่อนไหวจำนวนมากทำงานได้ดี) หรือไม่ว่าคุณจะต้องรับรองข้อมูลจุดยอดแต่ละเฟรมกลยุทธ์การปรับปรุงที่มีประสิทธิภาพหากหลัง ฯลฯ หากคุณไม่ทำเช่นนี้และใช้การแปลงแบบไร้เดียงสาคุณก็มีความเสี่ยงสูงมาก ในการทำงานมากเท่านั้นสำหรับผลลัพธ์สุดท้ายที่จะทำงานช้าลงจริง ๆ !
นี่อาจเป็นงานที่แย่มากเมื่อคุณพบมันครั้งแรก แต่มันก็ไม่ได้จริงๆ เมื่อคุณเข้าสู่โหมดการคิดเช่นนี้คุณจะพบว่ามันง่ายอย่างเหลือเชื่อและเกือบจะเป็นธรรมชาติ แต่คุณอาจพลาดความพยายามครั้งแรกของคุณและคุณไม่ควรท้อแท้ถ้าเป็นเช่นนั้น - การพลาดโอกาสคือการเรียนรู้จากสิ่งที่คุณทำผิด
ความคิดสุดท้ายเล็กน้อย
การมีข้อมูลโมเดลของคุณในรูปแบบที่สามารถโหลดลงใน VBO ได้ง่ายสามารถช่วยให้กระบวนการทั้งหมดนี้ง่ายขึ้นสำหรับคุณ นั่นหมายความว่าคุณควรหลีกเลี่ยงรูปแบบที่ซับซ้อนหรือแปลกใหม่อย่างน้อยในตอนแรก (และจนกว่าคุณจะคุ้นเคยกับกระบวนการมากขึ้น) ทำสิ่งต่าง ๆ ให้เรียบง่ายและเรียบง่ายที่สุดเท่าที่จะเป็นไปได้เมื่อเรียนรู้และจะมีสิ่งผิดพลาดน้อยลงและสถานที่น้อยกว่าที่จะต้องมองหาข้อผิดพลาดหาก (หรือเมื่อ!) สิ่งผิดพลาด
บางครั้งผู้คนถูกเลื่อนออกไปหากพวกเขาเห็นการใช้งาน VBO โดยใช้หน่วยความจำมากกว่าการปรับใช้ / บีบอัด glBegin / glEnd ที่ปรับให้เหมาะสม (พวกเขาอาจอ้างถึงว่าเป็น "ขยะ") อย่าเป็นอย่างนั้น ยกเว้นในกรณีที่รุนแรงใช้หน่วยความจำมันไม่ที่สำคัญ เป็นการแลกเปลี่ยนที่ชัดเจนที่นี่ - คุณยอมรับการใช้หน่วยความจำที่สูงขึ้นเพื่อแลกเปลี่ยนกับประสิทธิภาพที่สูงขึ้นอย่างมาก นอกจากนี้ยังช่วยในการพัฒนาความคิดที่ว่าหน่วยความจำเป็นทรัพยากรราคาถูกและอุดมสมบูรณ์ที่จะมีการใช้; ประสิทธิภาพไม่ได้
และในที่สุดเกาลัดเก่า - ถ้ามันเร็วพอแล้วงานของคุณก็เสร็จเรียบร้อย หากคุณกดปุ่มเป้าหมายเป็นเฟรมหากคุณมีพื้นที่ว่างสำหรับสภาพชั่วคราวก็ถือว่าดีพอและคุณสามารถไปยังขั้นตอนต่อไปได้ คุณสามารถเสียจำนวนมากของเวลาและพลังงานบีบพิเศษ 10% จากสิ่งที่ไม่จริงต้องมัน (รับมีการกระทำที่ยังคงตกอยู่ในกับดัก) จึงมักพิจารณาสิ่งที่การใช้งานที่เหมาะสมที่สุดของเวลาของคุณเอง - เพราะเวลาโปรแกรมเมอร์นั้นถูกกว่าและมีน้อยกว่าประสิทธิภาพ!