Ich dachte, ich hätte ein allgemeines Verständnis für die Funktionsweise von OpenGL-Namenskonventionen und -Erweiterungen gewonnen, bis ich auf einen Fall stieß, der mich verwirrte.
Hier ist mein bisheriges Verständnis:
Kein Suffix - z glGenBuffers()
. Diese Funktion ist Teil des Kernprofils. Die Wiki-Seite teilt mir mit, dass dies dem Kernprofil ab Version 1.5 hinzugefügt wurde.
ARB - zB glGenBuffersARB()
. Diese Funktion ist Teil der standardisierten GL_ARB_vertex_buffer_object
Erweiterung. Die Spezifikation dieser Erweiterung wird GenBuffersARB()
im Abschnitt "Neue Prozeduren und Funktionen" eindeutig deklariert . Der Abschnitt "Abhängigkeiten" sagt mir, dass ich möglicherweise aus einem 1.4+ Kontext darauf zugreifen kann, wenn die Hardware die Erweiterung unterstützt.
EXT - Dies sind herstellerspezifische Erweiterungen und Funktionen, die möglicherweise nur einige Hersteller unterstützen. Vertex-Pufferobjekt scheint keine EXT-Erweiterung in der Registrierung zu haben.
Hier ist, wo mein Verständnis zusammenbricht:
glGenFramebuffers
Wie das Wiki zeigt, wurde der Core in 3.0 erweitert.
Jetzt möchte ich auf die Framebuffer-Funktionen in einer niedrigeren Core-Profilversion als 3.0 zugreifen. Also möchte ich es als Erweiterung verwenden. Die Spezifikationsregistrierung gibt an, dass zwei Erweiterungen verfügbar sind - ARB und EXT .
Frage 1 - Wenn eine ARB-Erweiterung vorhanden ist, warum gibt es eine EXT-Erweiterung? Würden Sie nicht immer die standardisierte anstelle der herstellerspezifischen wählen?
Ein Blick auf die ARB-Spezifikation im Abschnitt "Neue Prozeduren und Funktionen" zeigt mir, dass die Erweiterung die GenRenderbuffers()
Funktion definiert . Dieses Mal gibt es kein ARB-Suffix. Für GLEW gibt es überhaupt keinen Funktionsprototyp glGenRenderbuffersARB()
. Seltsam.
Die EXT-Spezifikation hat jedoch eine GenRenderbuffersEXT()
Funktion im Abschnitt mit den neuen Funktionen, und GLEW hat auch eine Funktion glGenRenderbuffersEXT()
.
Frage 2 - Warum kein ARB-Suffix, wenn es ein EXT-Suffix gibt? Wie funktioniert dies für ARB, wenn die Namen der ARB-Funktion und der Kernfunktion identisch sind?
Frage 3 - Ich möchte letztendlich Framebuffer-Funktionen von einem 1.4-Profil. Welche Erweiterung und welchen Funktionsumfang soll ich verwenden, damit ich eine maximale Abdeckung der Hardwarekompatibilität erhalte?