Respostas:
Para referência - qgl.h de Doom3 .
OpenGL é uma API pouco estranha. Muitas vezes, você deve trabalhar com ponteiros de função porque faltam novas funcionalidades na implementação padrão ou porque você deseja trabalhar com extensões. Por exemplo, se você deseja ligar glCreateShader
, mas o sistema operacional em que você está desenvolvendo não é fornecido com novos cabeçalhos GL suficientes, você deve usar glGetProcAddress("CreateShader")
para carregar a função no driver do usuário. E então você tem que armazenar esse ponteiro de função em algum lugar.
Mesmo que seu ambiente de desenvolvimento tenha uma função específica, as máquinas dos usuários podem não ter. E então, uma determinada função pode vir de 2 a 3 formulários (extensão de fornecedor, extensão ARB, função principal) e, portanto, talvez você precise procurar uma função com vários nomes diferentes.
Muitas bibliotecas GL "loader" (como GLEW ) tentam seguir as convenções GL. Eles criam funções "falsas" com o gl
prefixo- usual e tentam magicamente fazer com que seu código funcione em qualquer sistema operacional ou driver que ofereça suporte aos recursos necessários. Essencialmente, em vez de glFoo
ser uma função real, é apenas um ponteiro global função ea biblioteca loader (durante a inicialização ou a primeira utilização) pesquisas FooEXT
, FooARB
e Foo
até encontrar uma implementação e atribui isso ao ponteiro global. O código do cliente parece que está apenas chamando uma função regular, mas magicamente tudo é resolvido no tempo de execução durante a inicialização, de uma maneira que lida com todas as diferentes plataformas e drivers existentes.
Outras bibliotecas colocam as funções em espaços para nome ou, de outra forma, variam um pouco da norma GL. id escreveu seu próprio carregador, seja porque não fez como os que existiram ou - mais provável - Quake apenas antecede qualquer outra biblioteca que id poderia ter usado (o q
na qgl
arquibancada prováveis para Quake, que foi o primeiro jogo id Tech para uso GL).
A especificação GL é gravada com essa possibilidade. A especificação é escrita sem prefixos; é a implementação do OpenGL que decide em qual prefixo usar ( gl
sendo o comum, é claro). As bibliotecas do carregador que colocam as funções em espaços para nome ou usam seus próprios prefixos são completamente válidas.
O Doom 3, baseado no mecanismo Quake, é completamente típico e justificado ao usar uma biblioteca de carregadores para lidar com as esquisitices do GL em várias plataformas e na escolha de usar o qgl
prefixo.
id
mal (você está completamente certo sobre a capitalização), embora o site en.wikipedia.org/wiki/Id_Tech ainda esteja escrito com espaço, em todas as fontes que pude encontrar.