Perché tutte le chiamate alle funzioni OpenGL hanno il prefisso “q” nel codice sorgente di Doom 3?


42

Perché ogni chiamata OpenGL ha il prefisso "q" nel codice sorgente di Doom 3? Sono funzioni personalizzate o una libreria diversa e, in tal caso, perché usarla su OpenGL? Qualsiasi ricerca su Google fornisce il modulo QGL OpenGL, che presumo non abbia nulla a che fare con esso.

Risposte:


62

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 glFooessere una funzione effettiva, è solo un puntatore globale funzione e la libreria loader (durante l'inizializzazione o primo utilizzo) ricerche FooEXT, FooARBe Foofinché 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' qin qglprobabili 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 ( glessendo 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 qglprefisso.


+1, e complimenti per aver individuato che ho scritto idmale (hai perfettamente ragione sulla capitalizzazione), anche se en.wikipedia.org/wiki/Id_Tech è ancora scritto con spazio, in tutte le fonti che ho trovato.
vaxquis,
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.