Compatibilità OpenGL, convenzioni di denominazione e ARB vs EXT


14

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_objectdell'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?

Risposte:


9

Domanda 1 : di solito la versione EXT viene prima come una collaborazione tra due o più fornitori. Le estensioni ARB richiedono ulteriori discussioni tra i membri votanti di Khronos e possono essere modificate dalla versione EXT prima di ottenere l'approvazione. Vedi l'estensione GL_ARB_direct_state_access che presenta molte modifiche rispetto a GL_EXT_direct_state_access.

Domanda 2 - La sezione Problemi dell'estensione GL_ARB_framebuffer_object indica perché le funzioni non hanno suffissi ARB:

(8) Perché i nuovi token e punti di ingresso in questa estensione non hanno suffissi come le altre estensioni ARB?

   RESOLVED: Unlike most ARB extensions, this is a strict subset of
   functionality already approved in OpenGL 3.0. This extension
   exists only to support that functionality on older hardware that
   cannot implement a full OpenGL 3.0 driver. Since there are no
   possible behavior changes between the ARB extension and core
   features, source code compatibility is improved by not using
   suffixes on the extension.

Domanda 3 - Se si desidera utilizzare oggetti framebuffer in un contesto in cui la versione GL è inferiore a 3.0, è necessario esaminare la stringa di estensione:

  1. Se GL_ARB_framebuffer_object è supportato, utilizzare le funzioni non ARB.
  2. Se è supportato solo GL_EXT_framebuffer_object, utilizzare le funzioni EXT.
  3. Se nessuna estensione è supportata, è necessario tornare al rendering offscreen a livello di sistema operativo come pbuffer.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.