Als Referenz - Doom3 ist qgl.h .
OpenGL ist eine seltsame kleine API. Sie müssen häufig mit Funktionszeigern arbeiten, weil in der Standardimplementierung neue Funktionen fehlen oder Sie mit Erweiterungen arbeiten möchten. Wenn Sie beispielsweise anrufen möchten glCreateShader
, das Betriebssystem, auf dem Sie entwickeln, jedoch nicht über genügend neue GL-Header verfügt, müssen Sie diese verwenden glGetProcAddress("CreateShader")
, um die Funktion aus dem Treiber des Benutzers zu laden. Und dann müssen Sie diesen Funktionszeiger irgendwo speichern.
Auch wenn Ihre Entwicklungsumgebung eine bestimmte Funktion hat, ist dies auf den Computern der Benutzer möglicherweise nicht der Fall. Und dann kann eine bestimmte Funktion in 2-3 Formen vorliegen (Herstellererweiterung, ARB-Erweiterung, Kernfunktion), und Sie müssen möglicherweise nach einer Funktion unter mehreren verschiedenen Namen suchen.
Viele GL "Loader" -Bibliotheken (wie GLEW ) versuchen, sich an die GL-Konventionen zu halten. Sie erstellen "gefälschte" Funktionen mit dem üblichen gl
Präfix und versuchen auf magische Weise, dass Ihr Code auf jedem Betriebssystem oder Treiber funktioniert, der die erforderlichen Funktionen unterstützt. Im Wesentlichen statt glFoo
eine tatsächliche Funktion ist, es ist nur ein globaler Funktionszeiger und die Ladebibliothek (bei der Initialisierung oder die ersten Gebrauch) sucht FooEXT
, FooARB
und Foo
bis es eine Implementierung findet und dann zuordnet , dass auf den globalen Zeiger. Der Client-Code sieht so aus, als würde er nur eine reguläre Funktion aufrufen, wird jedoch zur Laufzeit während der Initialisierung auf magische Weise so aufgelöst, dass die verschiedenen Plattformen und Treiber berücksichtigt werden.
Andere Bibliotheken setzen die Funktionen in Namespaces oder weichen auf andere Weise ein wenig von der GL-Norm ab. id schrieb ihre eigenen Loader, sei es, weil sie nicht wie die, die oder existierte - wahrscheinlicher - Quake früher nur eine andere Bibliothek , dass id verwendet haben könnte (die q
in qgl
wahrscheinlich steht für Quake, die die erste id Tech Spiel nützte GL).
Die GL-Spezifikation ist mit dieser Möglichkeit geschrieben. Die Spezifikation wird ohne Präfixe geschrieben. Es ist die Implementierung von OpenGL, die über das zu verwendende Präfix entscheidet ( gl
natürlich das übliche). Loader-Bibliotheken, die die Funktionen in Namespaces ablegen oder ihre eigenen Präfixe verwenden, sind vollständig gültig.
Doom 3, das auf der Quake-Engine basiert, ist völlig typisch und gerechtfertigt, wenn eine Loader-Bibliothek verwendet wird, um die Besonderheiten von GL auf mehreren Plattformen zu bewältigen, und wenn das qgl
Präfix verwendet wird.
id
schlecht geschrieben habe (Sie haben völlig Recht mit der Großschreibung), obwohl en.wikipedia.org/wiki/Id_Tech in allen Quellen, die ich finden konnte, immer noch mit Leerzeichen geschrieben ist.