Saya pikir saya telah membentuk pemahaman umum tentang bagaimana konvensi dan ekstensi penamaan OpenGL bekerja, sampai saya menemukan sebuah kasus yang membingungkan saya.
Inilah pemahaman saya sejauh ini:
Tanpa akhiran - mis glGenBuffers()
. Fungsi ini adalah bagian dari profil inti. The halaman wiki memberitahu saya bahwa ini telah ditambahkan ke profil inti mulai dari versi 1.5.
ARB - mis glGenBuffersARB()
. Fungsi ini adalah bagian dari GL_ARB_vertex_buffer_object
ekstensi standar . The spesifikasi dari ekstensi ini jelas menyatakan GenBuffersARB()
dalam "Prosedur Baru dan Fungsi" bagian. Bagian "Ketergantungan" memberi tahu saya bahwa saya berpotensi mengakses ini dari konteks 1.4+, jika perangkat keras mendukung ekstensi.
EXT - Ini adalah ekstensi dan fungsi khusus vendor yang hanya didukung oleh beberapa vendor. Objek buffer vertex tampaknya tidak memiliki ekstensi EXT di registri.
Di sinilah pemahaman saya rusak:
glGenFramebuffers
, seperti yang ditunjukkan wiki , ditambahkan ke inti pada 3.0.
Sekarang saya ingin mengakses fitur buffer bingkai pada versi profil inti yang lebih rendah dari 3.0. Jadi saya ingin menggunakannya sebagai ekstensi. Registri spesifikasi memberi tahu saya bahwa ada dua ekstensi yang tersedia - ARB dan EXT .
Pertanyaan 1 - Jika ekstensi ARB ada, mengapa ekstensi EXT ada? Tidakkah Anda selalu memilih yang terstandarisasi daripada yang khusus vendor?
Melihat spesifikasi ARB di bagian "Prosedur dan fungsi baru" memberi tahu saya bahwa ekstensi menentukan GenRenderbuffers()
fungsi. Tidak ada akhiran ARB saat ini. GLEW sama sekali tidak memiliki prototipe fungsi glGenRenderbuffersARB()
. Aneh.
Namun spesifikasi EXT memiliki GenRenderbuffersEXT()
fungsi di bagian fungsi baru, dan GLEW juga memiliki glGenRenderbuffersEXT()
.
Pertanyaan 2 - Mengapa tidak ada akhiran ARB jika ada akhiran EXT? Bagaimana cara kerjanya untuk ARB, mengingat bahwa nama-nama fungsi ARB dan fungsi inti adalah sama?
Pertanyaan 3 - Saya akhirnya ingin fitur Framebuffer dari profil 1.4. Ekstensi mana dan set fungsi mana yang harus saya gunakan agar saya mendapatkan cakupan kompatibilitas perangkat keras maksimum?