คำศัพท์นี้มีรากฐานมาจากประวัติของ OpenGL สิ่งสำคัญที่ต้องจำไว้คือสำหรับรุ่น GL ส่วนใหญ่ที่เกี่ยวข้องที่นี่ OpenGL มีการพัฒนาเพิ่มขึ้นเรื่อย ๆ และโดยการเพิ่มฟังก์ชั่นใหม่ให้กับ API ที่มีอยู่แล้วแทนที่จะเปลี่ยน API
OpenGL เวอร์ชันแรกไม่มีประเภทวัตถุเหล่านี้ การวาดประสบความสำเร็จโดยการออกการเรียก glBegin / glEnd หลายครั้งและปัญหาหนึ่งที่เกิดขึ้นกับรุ่นนี้คือมันไม่มีประสิทธิภาพมากในแง่ของค่าใช้จ่ายในการเรียกใช้ฟังก์ชัน
OpenGL 1.1 ใช้ขั้นตอนแรกเพื่อแก้ไขปัญหานี้โดยการแนะนำอาร์เรย์จุดสุดยอด แทนที่จะระบุข้อมูลจุดสุดยอดโดยตรงคุณสามารถหาแหล่งข้อมูลได้จากอาร์เรย์ C / C ++ ซึ่งเป็นชื่อ ดังนั้นอาร์เรย์จุดยอดจึงเป็นเช่นนั้น - อาร์เรย์ของจุดยอดและสถานะ GL จำเป็นต้องระบุ
วิวัฒนาการที่สำคัญต่อไปมาพร้อมกับ GL 1.5 และอนุญาตให้จัดเก็บข้อมูลอาร์เรย์จุดสุดยอดในหน่วยความจำ GPU มากกว่าในหน่วยความจำระบบ ("ฝั่งไคลเอ็นต์") จุดอ่อนของข้อกำหนดอาร์เรย์อาเรย์ GL 1.1 คือข้อมูลจุดสุดยอดทั้งหมดต้องถูกถ่ายโอนไปยัง GPU ในแต่ละครั้งที่คุณต้องการใช้งาน ถ้ามันมีอยู่บน GPU แล้วการถ่ายโอนนี้สามารถหลีกเลี่ยงได้และเพิ่มประสิทธิภาพการทำงานที่เป็นไปได้
ดังนั้นวัตถุ GL ชนิดใหม่จึงถูกสร้างขึ้นเพื่อให้สามารถจัดเก็บข้อมูลนี้บน GPU ได้ เช่นเดียวกับวัตถุพื้นผิวที่ใช้สำหรับการจัดเก็บข้อมูลพื้นผิววัตถุบัฟเฟอร์จุดสุดยอดเก็บข้อมูลจุดสุดยอด นี่เป็นเพียงกรณีพิเศษของประเภทวัตถุบัฟเฟอร์ทั่วไปซึ่งอาจจัดเก็บข้อมูลที่ไม่เฉพาะเจาะจง
API สำหรับการใช้วัตถุบัฟเฟอร์จุดสุดยอดได้รับการสนับสนุน piggy- บนจุดสุดยอดอาร์เรย์ API ที่มีอยู่แล้วซึ่งเป็นเหตุผลที่คุณเห็นสิ่งแปลก ๆ เช่นการแปลงไบต์ออฟเซ็ตเป็นตัวชี้ในนั้น ดังนั้นตอนนี้เรามี API จุดสุดยอดที่เก็บสถานะกับข้อมูลที่มาจากวัตถุบัฟเฟอร์มากกว่าจากหน่วยความจำในอาร์เรย์
นี่ทำให้เราเกือบจะจบเรื่องราวของเรา API ที่ได้นั้นค่อนข้างละเอียดเมื่อมันมาถึงการระบุสถานะของจุดสุดยอดดังนั้นวิธีการเพิ่มประสิทธิภาพอีกอย่างหนึ่งก็คือการสร้างประเภทวัตถุใหม่ที่รวบรวมสถานะทั้งหมดนี้เข้าด้วยกันอนุญาตการเปลี่ยนแปลงสถานะของจุดสุดยอดหลายจุดในการเรียก API เดียวและอนุญาต GPU เพื่อทำการปรับให้เหมาะสมที่อาจเกิดขึ้นเนื่องจากสามารถทราบได้ว่าจะใช้สถานะใดก่อนเวลา
ป้อนวัตถุอาร์เรย์สุดยอดที่รวบรวมทั้งหมดนี้เข้าด้วยกัน
ดังนั้นเพื่อสรุปว่าจุดสุดยอดอาร์เรย์เริ่มต้นชีวิตเป็นคอลเลกชันของรัฐและข้อมูล (เก็บไว้ในอาร์เรย์) สำหรับการวาดด้วย บัฟเฟอร์ยอดแทนที่ในหน่วยความจำเก็บอาร์เรย์มีประเภท GL วัตถุออกจากอาร์เรย์จุดสุดยอดเป็นเพียงรัฐ วัตถุยอดอาร์เรย์เป็นเพียงวัตถุคอนเทนเนอร์รัฐนี้จะช่วยให้มีการเปลี่ยนแปลงได้ง่ายขึ้นและมีน้อยเรียก API
char* buffer = socketRead();
(pseudocode) บันทึกในอีกทางหนึ่งอาศัยอยู่ในวงจรชีวิตของแอปทั้งหมด ดังนั้นคุณจึงสร้างอาเรย์ที่ไหนสักแห่งและเริ่มอ่านซ็อกเก็ตเมื่อใดก็ตามที่คุณได้รับข้อมูลที่คุณเขียนอันนั้นไปยังอาเรย์ทำให้คุณมีรายการข้อมูลทั้งหมดที่คุณได้รับเรียบร้อย