回答:
参考のために- Doom3のqgl.h。
OpenGLは奇妙な小さなAPIです。標準実装に新しい機能がないか、拡張機能を使用するために、多くの場合、関数ポインターを使用する必要があります。たとえば、を呼び出したいglCreateShader
が、開発中のOSに十分な新しいGLヘッダーが付属していない場合glGetProcAddress("CreateShader")
、ユーザーのドライバーから関数をロードするために使用する必要があります。そして、その関数ポインタをどこかに保存する必要があります。
開発環境に特定の機能がある場合でも、ユーザーのマシンにはない場合があります。そして、特定の関数は2〜3の形式(ベンダー拡張、ARB拡張、コア関数)になる可能性があるため、いくつかの異なる名前で関数を検索する必要があります。
多くのGL "ローダー"ライブラリ(GLEWなど)は、GLの規則に準拠しようとします。通常のgl
-prefixを使用して「偽の」関数を作成し、必要な機能をサポートするOSまたはドライバーでコードを魔法のように動作させようとします。本質的に、代わりにglFoo
実際の関数であり、それは探索(初期または最初の使用時)だけグローバル関数ポインタとローダライブラリのFooEXT
、FooARB
およびFoo
それが実装を発見した後、グローバルポインタにそれを割り当てるまで。クライアントコードは、通常の関数を呼び出しているように見えますが、すべての異なるプラットフォームとドライバーを処理する方法で、初期化中に実行時にすべて魔法のように解決されます。
他のライブラリは、関数を名前空間に配置するか、GLの標準とは少し異なります。可能性が高い- -彼らは存在していたりするもの好きではなかったので、IDのいずれか、自分自身のローダーを書いた地震がちょうどidが使用されている可能性があること、他のライブラリ(以前からq
でqgl
使用する最初のIDテックのゲームだったのQuakeのための可能性の高いスタンドを、 GL)。
GL仕様は、これが可能性として書かれています。仕様はプレフィックスなしで記述されています。使用するプレフィックスを決定するのはOpenGLの実装です(gl
もちろん、一般的なプレフィックスです)。関数を名前空間に配置したり、独自のプレフィックスを使用したローダーライブラリは完全に有効です。
Doom 3はQuakeエンジンに基づいており、完全に典型的であり、ローダーライブラリを使用して複数のプラットフォームでGLの奇妙なことに対処し、qgl
プレフィックスを使用することを選択します。
id
、en.wikipedia.org / wiki / Id_Tech はまだスペースで書かれていますが、私は悪いことを書いたのを称賛します(大文字については完全に正しいです)。