¿Por qué todas las llamadas a la función OpenGL tienen el prefijo "q" en el código fuente de Doom 3?

42

¿Por qué todas las llamadas de OpenGL tienen el prefijo "q" en el código fuente de Doom 3? ¿Son funciones personalizadas o una biblioteca diferente, y si es así, por qué usar eso sobre OpenGL? Cualquier búsqueda en Google aparece con el módulo Qt OpenGL, que supongo que no tiene nada que ver con eso.

Ben
fuente

Respuestas:

62

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 glprefijo 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 glFooser 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, FooARBy Foohasta 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 qde qglprobables 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 ( glsiendo 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 qglprefijo.

Sean Middleditch
fuente
+1, y felicitaciones por detectar que he escrito idmal (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.
vaxquis