ความเข้ากันได้กับ OpenGL การตั้งชื่อแบบแผนและ ARB vs EXT


14

ฉันคิดว่าฉันได้สร้างความเข้าใจโดยทั่วไปเกี่ยวกับวิธีการตั้งชื่อการประชุมและส่วนขยายของ 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 ควรใช้ส่วนขยายใดและชุดฟังก์ชั่นชุดใดเพื่อให้ได้ความครอบคลุมความเข้ากันได้ของฮาร์ดแวร์สูงสุด

คำตอบ:


9

คำถามที่ 1 - โดยปกติแล้วรุ่น EXT จะมาก่อนเป็นความร่วมมือระหว่างผู้ขายสองรายขึ้นไป ส่วนขยาย ARB ต้องการการสนทนาเพิ่มเติมในหมู่สมาชิกที่ลงคะแนนใน Khronos และสามารถเปลี่ยนแปลงได้จากรุ่น EXT ก่อนที่จะได้รับอนุมัติ ดูส่วนขยาย GL_ARB_direct_state_access ซึ่งมีการเปลี่ยนแปลงมากมายเมื่อเปรียบเทียบกับ GL_EXT_direct_state_access

คำถามที่ 2 - ส่วนประเด็นของส่วนขยาย GL_ARB_framebuffer_object ระบุว่าเหตุใดฟังก์ชันจึงไม่มีส่วนต่อท้าย ARB:

(8) เหตุใดโทเค็นและจุดเข้าใช้งานใหม่ในส่วนขยายนี้จึงไม่มีคำต่อท้ายเหมือนกับส่วนขยาย ARB อื่น ๆ

   RESOLVED: Unlike most ARB extensions, this is a strict subset of
   functionality already approved in OpenGL 3.0. This extension
   exists only to support that functionality on older hardware that
   cannot implement a full OpenGL 3.0 driver. Since there are no
   possible behavior changes between the ARB extension and core
   features, source code compatibility is improved by not using
   suffixes on the extension.

คำถามที่ 3 - ถ้าคุณต้องการใช้วัตถุ framebuffer ในบริบทที่รุ่น GL น้อยกว่า 3.0 คุณต้องดูที่สตริงส่วนขยาย:

  1. หาก GL_ARB_framebuffer_object ได้รับการสนับสนุนให้ใช้ฟังก์ชัน ARB ที่ไม่ใช่
  2. หากรองรับเฉพาะ GL_EXT_framebuffer_object ให้ใช้ฟังก์ชั่น EXT
  3. หากไม่รองรับส่วนขยายคุณต้องถอยกลับไปที่การเรนเดอร์หน้าจอระดับ OS เช่น pbuffers
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.