Pensavo di aver trovato una comprensione generale di come funzionavano le convenzioni e le estensioni dei nomi OpenGL, fino a quando non mi sono imbattuto in un caso che mi ha confuso.
Ecco la mia comprensione finora:
Nessun suffisso - ad es glGenBuffers()
. Questa funzione fa parte del profilo principale. La pagina wiki mi dice che questo è stato aggiunto al profilo principale a partire dalla versione 1.5.
ARB - ad es glGenBuffersARB()
. Questa funzione fa parte GL_ARB_vertex_buffer_object
dell'estensione standardizzata . Le specifiche di questa estensione dichiarano chiaramente GenBuffersARB()
nella sezione "Nuove procedure e funzioni". La sezione "Dipendenze" mi dice che posso potenzialmente accedervi da un contesto 1.4+, se l'hardware supporta l'estensione.
EXT : si tratta di estensioni e funzioni specifiche del fornitore che possono essere supportate solo da alcuni fornitori. L'oggetto buffer vertice non sembra avere un'estensione EXT nel registro.
Ecco dove la mia comprensione si rompe:
glGenFramebuffers
, come mostra la wiki , è stato aggiunto al core in 3.0.
Ora voglio accedere alle funzionalità del frame buffer con una versione del profilo core inferiore alla 3.0. Quindi voglio usarlo come estensione. Il registro delle specifiche mi dice che ci sono due estensioni disponibili: ARB ed EXT .
Domanda 1 : se esiste un'estensione ARB, perché esiste un'estensione EXT? Non sceglieresti sempre quello standardizzato rispetto a quello specifico del fornitore?
Uno sguardo alle specifiche ARB nella sezione "Nuove procedure e funzioni" mi dice che l'estensione definisce la GenRenderbuffers()
funzione. Nessun suffisso ARB questa volta. GLEW non ha affatto un prototipo di funzione glGenRenderbuffersARB()
. Strano.
Le specifiche EXT hanno tuttavia una GenRenderbuffersEXT()
funzione nella nuova sezione funzioni e anche GLEW glGenRenderbuffersEXT()
.
Domanda 2 - Perché nessun suffisso ARB se esiste un suffisso EXT? Come funziona questo per ARB, dato che i nomi della funzione ARB e della funzione principale sono gli stessi?
Domanda 3 - Alla fine voglio le funzionalità di Framebuffer da un profilo 1.4. Quale estensione e quale set di funzioni dovrei utilizzare per ottenere la massima copertura di compatibilità hardware?