Doom 3 kaynak kodunda neden tüm OpenGL işlev çağrıları “q” ile eklenmiş?


42

Doom 3 kaynak kodunda neden her OpenGL çağrısına "q" ekli? Bunlar özel işlevler mi yoksa farklı bir kütüphane mi ve öyleyse neden OpenGL'de kullanıyorsunuz? Herhangi bir Google araması QT OpenGL modülüyle geliyor ve bununla bir ilgisi olmadığını varsayıyorum.

Yanıtlar:


62

- Başvuru için Doom3 en qgl.h .

OpenGL garip bir küçük API. Standart uygulamada yeni işlevler eksik olduğundan veya uzantılarla çalışmak istediğiniz için sık sık işlev işaretçileriyle çalışmalısınız. Örneğin, aramak istiyorsanız glCreateShader, ancak geliştirdiğiniz işletim sistemi yeterince yeni GL başlıklarıyla birlikte gönderilmiyorsa glGetProcAddress("CreateShader"), işlevi kullanıcının sürücüsünden yüklemek için kullanmanız gerekir . Ve sonra bu fonksiyon imlecini bir yerde saklamanız gerekir.

Geliştirme ortamınızın belirli bir işlevi olsa bile, kullanıcıların makineleri olmayabilir. Ve sonra belirli bir fonksiyon 2-3 formda gelebilir (satıcı uzantısı, ARB uzantısı, çekirdek işlevi) ve bu nedenle birkaç farklı ad altında bir işlev aramak zorunda kalabilirsiniz.

Birçok GL "yükleyici" kütüphanesi ( GLEW gibi ) GL sözleşmelerine bağlı kalmaya çalışır. Normal gl-prefix ile "sahte" fonksiyonlar yaratırlar ve kodunuzu sihirli bir şekilde sadece gerekli özellikleri destekleyen herhangi bir işletim sistemi veya sürücü üzerinde çalıştırmaya çalışırlar. Yerine Esasen, glFoogerçek bir fonksiyonu olarak, bu sadece genel bir işlev işaretçisi ve (başlatma ya da ilk kullanımı sırasında) yükleyici kütüphane arama olduğunu FooEXT, FooARBve Foobu bir uygulama bulur ve sonra atar kadar küresel bir işaretçi için bu. İstemci kodu sadece normal bir işlev çağırıyor gibi görünüyor, ancak başlatma sırasında çalışma sırasında tüm farklı platformlar ve sürücülerle ilgilenecek şekilde sihirli bir şekilde çözülüyor.

Diğer kütüphaneler, işlevleri ad alanlarına yerleştirir veya aksi halde GL normundan biraz farklıdır. id, kendi yükleyici yazdı ya kendilerinin ya var olanları sevmedim çünkü - daha muhtemel - Quake sadece kimlik kullanılmış olabileceğini Başka bir kitaplık önceleyen ( qiçinde qglkullanımına ilk id Tech oyundu Quake için muhtemel standları, GL).

GL spec bu olasılık ile yazılmıştır. Spec önek olmadan yazılır ; Hangi ön ekin kullanılacağına karar veren OpenGL uygulamasıdır gl(elbette yaygın olan). İşlevleri ad alanlarına yerleştiren veya kendi öneklerini kullanan yükleyici kitaplıkları tamamen geçerlidir.

Quake motoruna dayanan Doom 3, tamamen platformda ve GL'nin tuhaflıklarını birden fazla platformda ele almak için bir yükleyici kitaplığı kullanmakta ve qglön eki kullanmayı seçmede haklı .


+1 ve tespit için övgüler idkötü yazdım (büyük harf kullanımı konusunda tamamen haklısın), en.wikipedia.org/wiki/Id_Tech bulabildiğim tüm kaynaklarda hala boşlukla yazılmış.
vaxquis
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.