ฉันคิดว่าฉันได้สร้างความเข้าใจโดยทั่วไปเกี่ยวกับวิธีการตั้งชื่อการประชุมและส่วนขยายของ OpenGL จนกระทั่งฉันพบกรณีที่ทำให้ฉันสับสน
นี่คือความเข้าใจของฉัน:
ไม่มีคำต่อท้าย - glGenBuffers()
เช่น ฟังก์ชั่นนี้เป็นส่วนหนึ่งของโปรไฟล์หลัก หน้าวิกิพีเดียบอกว่านี้ถูกบันทึกอยู่ในรายละเอียดหลักเริ่มต้นจากรุ่น 1.5
ARB - glGenBuffersARB()
เช่น ฟังก์ชั่นนี้เป็นส่วนหนึ่งของGL_ARB_vertex_buffer_object
ส่วนขยายมาตรฐาน ข้อมูลจำเพาะของส่วนขยายนี้อย่างชัดเจนประกาศGenBuffersARB()
ในส่วน "วิธีการและฟังก์ชั่นใหม่" ส่วน "การพึ่งพา" บอกฉันว่าฉันสามารถเข้าถึงสิ่งนี้ได้จากบริบท 1.4+ หากฮาร์ดแวร์รองรับส่วนขยาย
EXT - เป็นส่วนขยายและฟังก์ชั่นเฉพาะของผู้ขายที่มีเพียงผู้ขายบางรายเท่านั้นที่สามารถรองรับได้ วัตถุบัฟเฟอร์ Vertex ดูเหมือนไม่มีส่วนขยาย EXT ในรีจิสทรี
นี่คือสิ่งที่ความเข้าใจของฉันพังลง:
glGenFramebuffers
ตามที่วิกิแสดงให้เห็นถูกเพิ่มเข้าไปในแกนใน 3.0
ตอนนี้ฉันต้องการเข้าถึงฟีเจอร์บัฟเฟอร์เฟรมที่โปรไฟล์โปรไฟล์หลักที่ต่ำกว่า 3.0 ดังนั้นฉันต้องการใช้เป็นส่วนขยาย รีจิสทรีสเป็คบอกว่ามีสองส่วนขยายที่มีอยู่ - ARBและEXT
คำถามที่ 1 - หากมีส่วนขยาย ARB อยู่ทำไมส่วนขยาย EXT จึงมีอยู่ คุณจะไม่เลือกอันที่เป็นมาตรฐานมากกว่าของผู้ขายเฉพาะหรือไม่?
ดูข้อมูลจำเพาะ ARB ในส่วน "ขั้นตอนและฟังก์ชั่นใหม่" บอกฉันว่าส่วนขยายกำหนดGenRenderbuffers()
ฟังก์ชั่น ไม่มีส่วนต่อท้าย ARB ในครั้งนี้ GLEW ไม่มีต้นแบบฟังก์ชั่นสำหรับglGenRenderbuffersARB()
เลย แปลก.
ข้อมูลจำเพาะ EXT อย่างไรก็ตามมีGenRenderbuffersEXT()
ฟังก์ชั่นในส่วนของฟังก์ชั่นใหม่และ GLEW glGenRenderbuffersEXT()
นอกจากนี้ยังมี
คำถามที่ 2 - ทำไมไม่มีส่วนต่อท้าย ARB ถ้ามีส่วนต่อท้าย EXT มันทำงานอย่างไรกับ ARB เนื่องจากชื่อของฟังก์ชั่น ARB และฟังก์ชั่นหลักเหมือนกันหรือไม่
คำถามที่ 3 - ในที่สุดฉันต้องการฟีเจอร์ Framebuffer จากโปรไฟล์ 1.4 ควรใช้ส่วนขยายใดและชุดฟังก์ชั่นชุดใดเพื่อให้ได้ความครอบคลุมความเข้ากันได้ของฮาร์ดแวร์สูงสุด