Eu pensei que tinha formado um entendimento geral de como as convenções e extensões de nomes do OpenGL funcionavam, até me deparar com um caso que me confundia.
Aqui está o meu entendimento até agora:
Sem sufixo - por exemplo glGenBuffers()
. Esta função faz parte do perfil principal. A página wiki me diz que isso foi adicionado ao perfil principal a partir da versão 1.5.
ARB - por exemplo glGenBuffersARB()
. Esta função faz parte da GL_ARB_vertex_buffer_object
extensão padronizada . As especificações desta extensão declaram claramente GenBuffersARB()
na seção "Novos procedimentos e funções". A seção "Dependências" diz que eu posso acessar isso potencialmente a partir de um contexto 1.4+, se o hardware suportar a extensão.
EXT - Essas são extensões e funções específicas do fornecedor que apenas alguns fornecedores podem suportar. O objeto de buffer do vértice não parece ter uma extensão EXT no registro.
Aqui é onde meu entendimento se divide:
glGenFramebuffers
, como mostra o wiki , foi adicionado ao núcleo no 3.0.
Agora, quero acessar os recursos do buffer de quadros em uma versão de perfil principal inferior a 3.0. Então, eu quero usá-lo como uma extensão. O registro de especificações informa que existem duas extensões disponíveis - ARB e EXT .
Pergunta 1 - Se existe uma extensão ARB, por que existe uma extensão EXT? Você não escolheria sempre o padronizado sobre o específico do fornecedor?
Uma olhada na especificação do ARB na seção "Novos procedimentos e funções" informa que a extensão define a GenRenderbuffers()
função. Nenhum sufixo ARB neste momento. O GLEW não possui um protótipo de função glGenRenderbuffersARB()
. Esquisito.
A especificação EXT, no entanto, possui uma GenRenderbuffersEXT()
função na seção de novas funções, e o GLEW também possui glGenRenderbuffersEXT()
.
Pergunta 2 - Por que nenhum sufixo ARB se existe um sufixo EXT? Como isso funciona para o ARB, considerando que os nomes da função ARB e da função principal são os mesmos?
Pergunta 3 - Em última análise, quero os recursos do Framebuffer a partir de um perfil 1.4. Qual extensão e qual conjunto de funções devo usar para obter a cobertura máxima de compatibilidade de hardware?