Mengapa semua panggilan fungsi OpenGL diawali dengan "q" dalam kode sumber Doom 3?


42

Mengapa setiap panggilan OpenGL diawali dengan "q" dalam kode sumber Doom 3? Apakah itu fungsi khusus atau pustaka yang berbeda, dan jika demikian, mengapa menggunakannya di atas OpenGL? Pencarian Google apa pun muncul dengan modul Qt OpenGL, yang saya anggap tidak ada hubungannya dengan itu.

Jawaban:


62

Untuk referensi - qgl.h Doom3 .

OpenGL adalah API kecil yang aneh. Anda harus sering bekerja dengan pointer fungsi karena implementasi standar tidak memiliki fungsionalitas baru atau karena Anda ingin bekerja dengan ekstensi. Misalnya, jika Anda ingin menelepon glCreateShader, tetapi OS yang Anda kembangkan tidak dikirimkan dengan header GL yang cukup baru, Anda harus menggunakan glGetProcAddress("CreateShader")untuk memuat fungsi dari driver pengguna. Dan kemudian Anda harus menyimpan pointer fungsi itu di suatu tempat.

Bahkan jika lingkungan pengembangan Anda memiliki fungsi tertentu, mesin pengguna mungkin tidak. Dan kemudian fungsi tertentu dapat datang dalam 2-3 bentuk (ekstensi vendor, ekstensi ARB, fungsi inti) sehingga Anda mungkin harus mencari fungsi di bawah beberapa nama yang berbeda.

Banyak pustaka "loader" GL (seperti GLEW ) mencoba untuk tetap berpegang pada konvensi GL. Mereka membuat fungsi "palsu" dengan gl-prefix yang biasa dan mencoba membuat kode Anda secara ajaib berfungsi pada OS atau driver yang mendukung fitur yang diperlukan. Pada dasarnya, bukannya glFoomenjadi fungsi yang sebenarnya, itu hanya fungsi pointer global dan perpustakaan loader (selama inisialisasi atau penggunaan pertama) pencarian FooEXT, FooARBdan Foosampai menemukan sebuah implementasi dan kemudian ditunjuk yang ke pointer global. Kode klien sepertinya hanya memanggil fungsi biasa tetapi secara ajaib semua akan diselesaikan saat runtime selama inisialisasi dengan cara yang berhubungan dengan semua platform dan driver yang berbeda di luar sana.

Perpustakaan lain menempatkan fungsi dalam ruang nama atau sedikit berbeda dari norma GL. id menulis loader sendiri, baik karena mereka tidak seperti yang yang ada atau - lebih mungkin - Quake hanya mendahului perpustakaan lain yang id bisa digunakan ( qdi qgltribun kemungkinan untuk Quake, yang merupakan pertandingan id Tek pertama yang digunakan GL).

Spesifikasi GL ditulis dengan kemungkinan ini. Spesifikasi ditulis tanpa awalan; itu adalah implementasi OpenGL yang memutuskan awalan mana yang akan digunakan ( glmenjadi yang umum, tentu saja). Pustaka pemuat yang menempatkan fungsi dalam ruang nama atau menggunakan awalannya sendiri benar-benar valid.

Doom 3, yang didasarkan pada mesin Quake, benar-benar khas dan dibenarkan dalam menggunakan perpustakaan loader untuk menangani keanehan GL pada berbagai platform dan dalam memilih untuk menggunakan qglawalan.


+1, dan pujian untuk bercak Saya telah menulis idburuk (Anda benar tentang kapitalisasi), meskipun en.wikipedia.org/wiki/Id_Tech masih ditulis dengan spasi, di semua sumber yang dapat saya temukan.
vaxquis
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.