A modo de referencia - qgl.h de Doom 3 .
OpenGL es una pequeña API extraña. A menudo debe trabajar con punteros de función, ya sea porque a la implementación estándar le faltan nuevas funciones o porque desea trabajar con extensiones. Por ejemplo, si desea llamar glCreateShader
, pero el sistema operativo en el que está desarrollando no incluye encabezados GL lo suficientemente nuevos, debe usarlo glGetProcAddress("CreateShader")
para cargar la función desde el controlador del usuario. Y luego tienes que almacenar ese puntero de función en alguna parte.
Incluso si su entorno de desarrollo tiene una función particular, las máquinas de los usuarios podrían no tenerla. Y luego, una determinada función puede venir en 2-3 formas (extensión de proveedor, extensión ARB, función principal) y, por lo tanto, es posible que deba buscar una función con varios nombres diferentes.
Muchas bibliotecas de "cargador" de GL (como GLEW ) intentan cumplir con las convenciones de GL. Crean funciones "falsas" con el gl
prefijo habitual e intentan hacer que su código funcione mágicamente en cualquier sistema operativo o controlador que admita las funciones necesarias. En esencia, en lugar de glFoo
ser una función real, es sólo un puntero global de la función y la biblioteca cargador (durante la inicialización o el primer uso) búsquedas FooEXT
, FooARB
y Foo
hasta que encuentra una aplicación y luego cesionarios que al puntero global. Parece que el código del cliente solo está llamando a una función regular, pero mágicamente todo se resuelve en tiempo de ejecución durante la inicialización de una manera que trata con todas las diferentes plataformas y controladores.
Otras bibliotecas colocan las funciones en espacios de nombres o varían un poco de la norma GL. Identificación escribió su propio cargador, ya sea porque no lo hicieron como los que existían o - más probablemente - Quake justo anterior a cualquier otra biblioteca que podría haber utilizado Identificación (la q
de qgl
probables representa sismo, que fue el primer juego de id Tech para su uso GL).
La especificación GL está escrita con esta posibilidad. La especificación se escribe sin prefijos; Es la implementación de OpenGL la que decide qué prefijo usar ( gl
siendo el común, por supuesto). Las bibliotecas de cargadores que colocan las funciones en espacios de nombres o que usan sus propios prefijos son completamente válidas.
Doom 3, que se basa en el motor Quake, es completamente típico y está justificado en el uso de una biblioteca de cargadores para lidiar con las rarezas de GL en múltiples plataformas y en la elección de usar el qgl
prefijo.
id
mal (tienes toda la razón sobre la capitalización), aunque en.wikipedia.org/wiki/Id_Tech todavía está escrito con espacio, en todas las fuentes que pude encontrar.