Cosa sono le estensioni OpenGL e quali sono i vantaggi/compromessi del loro utilizzo?

StackOverflow https://stackoverflow.com/questions/17352

  •  08-06-2019
  •  | 
  •  

Domanda

In relazione a questa domanda su Utilizzo delle estensioni OpenGL, qual è lo scopo di queste funzioni di estensione?Perché dovrei usarli?Inoltre, ci sono compromessi o trucchi associati al loro utilizzo?

È stato utile?

Soluzione

Lo standard OpenGL consente ai singoli fornitori di fornire funzionalità aggiuntive tramite estensioni man mano che viene creata una nuova tecnologia.Le estensioni possono introdurre nuove funzioni e nuove costanti e possono allentare o rimuovere restrizioni sulle funzioni OpenGL esistenti.

Ogni fornitore ha un'abbreviazione alfabetica che viene utilizzata per denominare le nuove funzioni e costanti.Ad esempio, l'abbreviazione di NVIDIA (NV) viene utilizzata per definire la funzione proprietaria glCombinerParameterfvNV() e la costante GL_NORMAL_MAP_NV.

Può succedere che più di un fornitore accetti di implementare la stessa funzionalità estesa.In tal caso viene utilizzata l'abbreviazione EXT.Può inoltre accadere che l'Architecture Review Board "benedica" l'estensione.Diventa quindi nota come estensione standard e viene utilizzata l'abbreviazione ARB.La prima estensione ARB è stata GL_ARB_multitexture, introdotta nella versione 1.2.1.Seguendo il percorso di promozione dell'estensione ufficiale, il multitexturing non è più un'estensione ARB implementata facoltativamente, ma fa parte dell'API core OpenGL dalla versione 1.3.

Prima di utilizzare un'estensione, un programma deve prima determinarne la disponibilità e quindi ottenere puntatori a eventuali nuove funzioni definite dall'estensione.Il meccanismo per eseguire questa operazione è specifico della piattaforma ed esistono librerie come GLEW e GLEE per semplificare il processo.

Altri suggerimenti

Estensioni OpenGL sono nuove funzionalità aggiunte al Specifica OpenGL, vengono aggiunti dall'organismo di standardizzazione OpenGL e dai vari fornitori di schede grafiche.Questi vengono esposti al programmatore come nuove chiamate di funzione o variabili.Ogni nuova versione della specifica OpenGL viene fornita con funzionalità più recenti e (tipicamente) include tutte le funzionalità ed estensioni precedenti.

Il vero problema con le estensioni OpenGL esiste solo su Windows.Microsoft non ha supportato alcuna estensione rilasciata successivamente OpenGL v1.1.I fornitori di schede grafiche superano questo problema fornendo la propria versione di questa funzionalità tramite file di intestazione e librerie.Tuttavia, l'utilizzo di questo può essere un po' doloroso, come mostra la domanda a cui hai collegato.Ma questo problema è in gran parte scomparso con la popolarità di GLEW, che si occupa di racchiudere tutto questo in un pacchetto facile da usare.

Se utilizzi un'estensione OpenGL molto recente, tieni presente che potrebbe non essere supportata su hardware grafico meno recente.Oltre a questo, non ci sono altri svantaggi nell'usare queste estensioni.La maggior parte delle estensioni che diventano standard sono piuttosto maledette utile e c'è ben poca logica per non usarli.

Le estensioni sono, in generale, un modo per i fornitori di schede grafiche di aggiungere nuove funzionalità a OpenGL senza dover attendere la prossima revisione delle specifiche OpenGL.Esistono diversi tipi di estensioni:

  1. Estensione del fornitore: solo un fornitore fornisce un determinato tipo di funzionalità.
    • Esempio: NV_vertex_program
  2. Estensione multivendor: più fornitori si sono riuniti e hanno concordato la funzionalità.
    • Esempio: EXT_vertex_program
  3. Estensione ARB: l'OpenGL Architecture Review Board ha benedetto l'estensione.Hai una ragionevole aspettativa che questo tipo di estensione durerà per un po'.
    • Esempio: ARB_vertex_program

Le estensioni non devono seguire tutti questi passaggi.A volte un'estensione viene implementata da un solo fornitore, prima che la progettazione dell'hardware prenda una strada diversa e l'estensione venga abbandonata.Altre volte, un'estensione potrebbe arrivare allo stato ARB prima che tutti decidano che esiste un modo migliore.(IL ARB_vertex_program L'approccio, ad esempio, è stato messo da parte a favore dell'approccio del linguaggio di ombreggiatura di alto livello ARB_vertex_shader quando è arrivato il momento di inserire gli shader nelle specifiche OpenGL principali.) Anche le estensioni ARB non durano per sempre;Non scriverei qualcosa che oggi richieda ARB_matrix_palette, ad esempio.

Detto questo, è un'ottima idea tenersi aggiornati sulle estensioni, in particolare sulle ultime estensioni ARB ed EXT.In passato era vero che alcuni dei "percorsi veloci" attraverso l'hardware erano accessibili solo tramite estensioni.Allo stesso modo, se vuoi sapere quali funzionalità può svolgere un componente hardware, non c'è posto migliore in cui cercare che in un'estensione specifica del fornitore.

Se hai appena iniziato con OpenGL, ti consiglio di indagare:

  • ARB_vertex_buffer_object (vertici)
  • ARB_vertex_shader / ARB_fragment_shader / ARB_shader_objects / Specifiche GLSL (shader)

Più avanzato:

  • ARB/EXT_framebuffer_object (rendering fuori schermo)

Queste sono tutte le funzionalità che sono state integrate nel nucleo, ma può essere bello vederle isolatamente in modo da poter avere un'idea migliore di dove si trovano i suoi confini.(Le specifiche OpenGL principali mescolano perfettamente il vecchio con il nuovo, quindi questo può essere piuttosto importante se si desidera rimanere sulla strada veloce ed evitare l'eredità e talvolta implementata nei percorsi software.)

Qualunque cosa tu faccia, assicurati di disporre di controlli appropriati per le estensioni che decidi di utilizzare e di fallback ove necessario.Anche se la tua carta può avere una determinata estensione, non c'è garanzia che l'estensione sia presente sulla carta di un altro venditore o anche su un altro sistema operativo con la stessa carta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top