Risposte:
Per riferimento - qgl.h di Doom3 .
OpenGL è una piccola API strana. È spesso necessario lavorare con i puntatori a funzione perché nell'implementazione standard mancano nuove funzionalità o perché si desidera lavorare con le estensioni. Ad esempio, se si desidera chiamare glCreateShader
, ma il sistema operativo su cui si sta sviluppando non viene fornito con intestazioni GL abbastanza nuove, è necessario utilizzare glGetProcAddress("CreateShader")
per caricare la funzione dal driver dell'utente. E poi devi memorizzare quel puntatore a funzione da qualche parte.
Anche se l'ambiente di sviluppo ha una funzione particolare, le macchine degli utenti potrebbero non esserlo. Quindi una determinata funzione può essere disponibile in 2-3 forme (estensione del fornitore, estensione ARB, funzione principale) e quindi potrebbe essere necessario cercare una funzione con diversi nomi diversi.
Molte librerie GL "loader" (come GLEW ) cercano di attenersi alle convenzioni GL. Creano funzioni "false" con il solito gl
-prefix e cercano di far funzionare magicamente il tuo codice su qualsiasi sistema operativo o driver che supporti le funzionalità necessarie. Essenzialmente, invece di glFoo
essere una funzione effettiva, è solo un puntatore globale funzione e la libreria loader (durante l'inizializzazione o primo utilizzo) ricerche FooEXT
, FooARB
e Foo
finché non trova un'implementazione e poi assegna che al puntatore globale. Il codice client sembra che stia semplicemente chiamando una funzione regolare ma magicamente tutto viene risolto in fase di esecuzione durante l'inizializzazione in un modo che si occupa di tutte le diverse piattaforme e driver là fuori.
Altre librerie inseriscono le funzioni negli spazi dei nomi o altrimenti variano leggermente dalla norma GL. id ha scritto il proprio caricatore, o perché non l'hanno fatto come quelli che esistevano o - più probabilmente - Quake solo precede qualsiasi altra libreria che id avrebbe potuto usare (l' q
in qgl
probabili sta per Quake, che è stato il primo gioco di id Tech per l'uso GL).
Le specifiche GL sono scritte con questa possibilità. La specifica è scritta senza prefissi; è l'implementazione di OpenGL che decide quale prefisso usare ( gl
essendo quello comune, ovviamente). Le librerie del caricatore che inseriscono le funzioni negli spazi dei nomi o utilizzano i propri prefissi sono completamente valide.
Doom 3, essendo basato sul motore di Quake, è completamente tipico e giustificato nell'uso di una libreria di caricatori per gestire le stranezze di GL su più piattaforme e nella scelta di usare il qgl
prefisso.
id
male (hai perfettamente ragione sulla capitalizzazione), anche se en.wikipedia.org/wiki/Id_Tech è ancora scritto con spazio, in tutte le fonti che ho trovato.