Pour référence - la qgl.h de Doom3 .
OpenGL est une petite API étrange. Vous devez souvent utiliser des pointeurs de fonction, soit parce que de nouvelles fonctionnalités sont manquantes dans l’implémentation standard, soit parce que vous souhaitez utiliser des extensions. Par exemple, si vous souhaitez appeler glCreateShader
, mais que le système d'exploitation sur lequel vous travaillez ne contient pas assez d'en-têtes GL nouveaux, vous devez l'utiliser glGetProcAddress("CreateShader")
pour charger la fonction dans le pilote de l'utilisateur. Et puis vous devez stocker ce pointeur de fonction quelque part.
Même si votre environnement de développement a une fonction particulière, il est possible que les machines des utilisateurs ne le soient pas. Et puis, une fonction donnée peut prendre 2 à 3 formes (extension de fournisseur, extension ARB, fonction principale) et vous devrez peut-être alors rechercher une fonction sous plusieurs noms différents.
De nombreuses bibliothèques de GL "loader" (comme GLEW ) essaient de s'en tenir aux conventions de GL. Ils créent des "fausses" fonctions avec le gl
préfixe habituel et essayent de faire en sorte que votre code fonctionne sur n'importe quel système d'exploitation ou pilote prenant en charge les fonctionnalités nécessaires. Pour l' essentiel, au lieu d' glFoo
être une fonction réelle, il est juste un pointeur global de la fonction et la bibliothèque du chargeur (pendant l' initialisation ou la première utilisation) les recherches FooEXT
, FooARB
et Foo
jusqu'à ce qu'il trouve une mise en œuvre et attribue ensuite que le pointeur global. Le code client ressemble à un appel de fonction classique, mais il est magiquement résolu lors de l’initialisation lors de l’initialisation d’une manière qui traite de toutes les plates-formes et de tous les pilotes.
D'autres bibliothèques placent les fonctions dans des espaces de noms ou s'écartent un peu de la norme GL. id écrit leur propre chargeur, soit parce qu'ils ne l' ont pas comme ceux qui existaient ou - plus probable - Quake antidate ne importe quelle autre bibliothèque id aurait pu utiliser (le q
dans les qgl
stands probables pour Quake, ce qui était le premier jeu id Tech à l' utilisation GL).
La spécification GL est écrite avec cette possibilité. La spécification est écrite sans préfixes; c'est l'implémentation d'OpenGL qui décide du préfixe à utiliser (le préfixe gl
commun, bien sûr). Les bibliothèques de chargeur qui placent les fonctions dans des espaces de noms ou utilisent leurs propres préfixes sont totalement valides.
Doom 3, basé sur le moteur Quake, est tout à fait typique et justifié d'utiliser une bibliothèque de chargeur pour traiter les bizarreries de GL sur plusieurs plates-formes et de choisir d'utiliser le qgl
préfixe.
id
mal écrit (vous avez parfaitement raison en ce qui concerne la capitalisation), bien que fr.wikipedia.org/wiki/Id_Tech soit toujours écrit avec de l'espace, dans toutes les sources que j'ai pu trouver.