Doom 3ソースコードで、すべてのOpenGL関数呼び出しの先頭に「q」が付いているのはなぜですか?


42

Doom 3ソースコードですべてのOpenGL呼び出しに「q」というプレフィックスが付いているのはなぜですか?それらはカスタム関数または別のライブラリですか?その場合、OpenGLでそれを使用する理由は何ですか?Googleの検索ではQt OpenGLモジュールが使用されますが、これは関係ないと思います。

回答:


62

参考のために- Doom3のqgl.h

OpenGLは奇妙な小さなAPIです。標準実装に新しい機能がないか、拡張機能を使用するために、多くの場合、関数ポインターを使用する必要があります。たとえば、を呼び出したいglCreateShaderが、開発中のOSに十分な新しいGLヘッダーが付属していない場合glGetProcAddress("CreateShader")、ユーザーのドライバーから関数をロードするために使用する必要があります。そして、その関数ポインタをどこかに保存する必要があります。

開発環境に特定の機能がある場合でも、ユーザーのマシンにはない場合があります。そして、特定の関数は2〜3の形式(ベンダー拡張、ARB拡張、コア関数)になる可能性があるため、いくつかの異なる名前で関数を検索する必要があります。

多くのGL "ローダー"ライブラリ(GLEWなど)は、GLの規則に準拠しようとします。通常のgl-prefixを使用して「偽の」関数を作成し、必要な機能をサポートするOSまたはドライバーでコードを魔法のように動作させようとします。本質的に、代わりにglFoo実際の関数であり、それは探索(初期または最初の使用時)だけグローバル関数ポインタとローダライブラリのFooEXTFooARBおよびFooそれが実装を発見した後、グローバルポインタにそれを割り当てるまで。クライアントコードは、通常の関数を呼び出しているように見えますが、すべての異なるプラットフォームとドライバーを処理する方法で、初期化中に実行時にすべて魔法のように解決されます。

他のライブラリは、関数を名前空間に配置するか、GLの標準とは少し異なります。可能性が高い- -彼らは存在していたりするもの好きではなかったので、IDのいずれか、自分自身のローダーを書いた地震がちょうどidが使用されている可能性があること、他のライブラリ(以前からqqgl使用する最初のIDテックのゲームだったのQuakeのための可能性の高いスタンドを、 GL)。

GL仕様は、これが可能性として書かれています。仕様はプレフィックスなしで記述されています。使用するプレフィックスを決定するのはOpenGLの実装です(glもちろん、一般的なプレフィックスです)。関数を名前空間に配置したり、独自のプレフィックスを使用したローダーライブラリは完全に有効です。

Doom 3はQuakeエンジンに基づいており、完全に典型的であり、ローダーライブラリを使用して複数のプラットフォームでGLの奇妙なことに対処し、qglプレフィックスを使用することを選択します。


+1、および私が見つけたすべてのソースではiden.wikipedia.org / wiki / Id_Tech はまだスペースで書かれていますが、私は悪いことを書いたのを称賛します(大文字については完全に正しいです)。
vaxquis
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.