Feature-Centered Header design
L'API OpenGL è iterativo sviluppato e rilasciato nelle versioni, internamente (per la specifica API) che si chiama caratteristiche. L'ultima versione di OpenGL è 4.5. La versione precedente sono 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 e 4.4. OpenGL utilizza un modello di deprecazione per rimuovere le parti obsolete della sua API che risulta in compatibilità (con API deprecato) e core (senza API deprecata) che si manifesta nel contesto OpenGL di destinazione . Inoltre, i nuovi concetti di API sono suggeriti come estensioni (spesso specifiche del fornitore) che potrebbero essere integrate nelle versioni future di . Tutto ciò si traduce in molte possibili specifiche manifestazioni dell'API OpenGL che è possibile utilizzare nel programma.
Un duro compito è quello di aderire a quella concordata insieme di funzioni nel proprio programma di OpenGL (ad esempio, OpenGL 3.2 Nucleo se si desidera sviluppare per ogni Windows, MacOS e Linux rilasciato negli ultimi 4 anni).accollatura facilita questo fornendo intestazioni per funzionalità tramite sottoinsiemi ben definiti/generati dell'API OpenGL.
All-funzioni OpenGL intestazioni
Se non si utilizzano le intestazioni per-funzione il programma OpenGL può assomigliare questo:
#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);
Single-Feature OpenGL intestazioni
Quando si sviluppa il codice su Windows con gli ultimi driver installati, è probabile che il codice sopra compili e corri. Ma se vuoi portare la porta a sistemi con supporto driver meno maturo (ad es. MacOS o Linux usando driver open source), potresti chiederti se è disponibile glDrawElementsInstanced
. In questo caso, basta passare per le intestazioni per-funzione di glbinding e scegliere le intestazioni Nucleo OpenGL 3.2 (come si sa che a almeno questa versione è disponibile su tutte le piattaforme di destinazione):
#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);
Se il compila il codice di quanto tu possa essere sicuro che sia compatibile con OpenGL 3.2 Core . L'uso di funzioni che non sono ancora disponibili o che si basano sulla funzionalità deprecata di sono state eliminate.