Eigenschaft Zentrierte Header-Entwurf
Die OpenGL API iterativ entwickelt und in Versionen veröffentlicht, intern (für die API-Spezifikation) benannt Funktionen. Das neueste Feature/Version von OpenGL ist 4.5. Die vorherige Version sind 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 2.0, 2.1, 3.0, 3.1, 3.2, 3.3, 4.0, 4.1, 4.2, 4.3 und 4.4. OpenGL verwendet ein veraltetes Modell zum Entfernen veralteter Teile seiner API, die Kompatibilität (mit veralteten API) und Kern (ohne veraltetes API) Verwendung, die im Ziel OpenGL-Kontext manifestiert. Darüber hinaus werden neue API-Konzepte als Erweiterungen (häufig herstellerspezifisch) vorgeschlagen, die möglicherweise in zukünftige Versionen integriert werden. All dies führt zu vielen möglichen spezifischen Manifestationen der OpenGL API, die Sie in Ihrem Programm verwenden können.
Eine schwierige Aufgabe ist es, sich an eine der Funktionen in Ihrem eigenen OpenGL Programms vereinbart (zum Beispiel OpenGL 3.2-Core, wenn Sie alle für Windows, MacOS und Linux in den letzten 4 Jahren freigegeben entwickeln wollen).glbinding erleichtert dies durch die Bereitstellung per-Feature-Header mit Hilfe von gut definierten/generierten Teilmengen der OpenGL-API.
All-Funktionen OpenGL-Header
Wenn Sie pro-Funktion nicht Header verwenden die OpenGL-Programm wie aussehen kann dieses:
#include <glbinding/gl/gl.h>
// draw code
gl::glClear(gl::GL_COLOR_BUFFER_BIT | gl::GL_DEPTH_BUFFER_BIT);
gl::glUniform1i(u_numcubes, m_numcubes);
gl::glDrawElementsInstanced(gl::GL_TRIANGLES, 18, gl::GL_UNSIGNED_BYTE, 0, m_numcubes * m_numcubes);
Einzel-Eigenschaft OpenGL-Header
Bei der Entwicklung Ihres Codes unter Windows mit den neuesten installierten Treibern wird der obige Code wahrscheinlich kompiliert und Renn. Aber wenn Sie auf Systeme mit weniger ausgereifter Treiberunterstützung portieren möchten (z. B. macOS oder Linux mit Open-Source-Treibern), fragen Sie sich vielleicht, ob glDrawElementsInstanced
verfügbar ist. In diesem Fall schalten nur pro-Feature-Header von glbinding und die Core-Header OpenGL 3.2 wählen (wie Sie wissen, dass bei dest diese Version auf allen Zielplattformen verfügbar ist):
#include <glbinding/gl32core/gl.h>
// draw code
gl32core::glClear(gl32core::GL_COLOR_BUFFER_BIT | gl32core::GL_DEPTH_BUFFER_BIT);
gl32core::glUniform1i(u_numcubes, m_numcubes);
gl32core::glDrawElementsInstanced(gl32core::GL_TRIANGLES, 18, gl32core::GL_UNSIGNED_BYTE, 0, m_numcubes * m_numcubes);
Wenn die Code kompiliert, als Sie sicher sein können, dass es OpenGL 3.2 Core konform ist. Die Verwendung von Funktionen, die noch nicht verfügbar sind oder auf veraltete Funktionen basieren, wird verhindert.