O que são extensões OpenGL e quais são os benefícios/compensações de usá-las?

StackOverflow https://stackoverflow.com/questions/17352

  •  08-06-2019
  •  | 
  •  

Pergunta

Em relação a esta questão Usando extensões OpenGL, qual é o propósito dessas funções de extensão?Por que eu iria querer usá-los?Além disso, há alguma compensação ou pegadinha associada ao seu uso?

Foi útil?

Solução

O padrão OpenGL permite que fornecedores individuais forneçam funcionalidades adicionais por meio de extensões à medida que novas tecnologias são criadas.As extensões podem introduzir novas funções e novas constantes e podem relaxar ou remover restrições nas funções OpenGL existentes.

Cada fornecedor possui uma abreviatura alfabética que é usada para nomear suas novas funções e constantes.Por exemplo, a abreviatura da NVIDIA (NV) é usada na definição de sua função proprietária glCombinerParameterfvNV() e sua constante GL_NORMAL_MAP_NV.

Pode acontecer que mais de um fornecedor concorde em implementar a mesma funcionalidade estendida.Nesse caso, a abreviatura EXT é usada.Pode acontecer ainda que o Conselho de Revisão de Arquitetura “abençoe” a extensão.Ela então passa a ser conhecida como extensão padrão e a abreviatura ARB é usada.A primeira extensão ARB foi GL_ARB_multitexture, introduzida na versão 1.2.1.Seguindo o caminho oficial de promoção da extensão, a multitexturing não é mais uma extensão ARB implementada opcionalmente, mas faz parte da API principal do OpenGL desde a versão 1.3.

Antes de usar uma extensão, um programa deve primeiro determinar sua disponibilidade e, em seguida, obter ponteiros para quaisquer novas funções definidas pela extensão.O mecanismo para fazer isso é específico da plataforma e existem bibliotecas como GLEW e GLEE para simplificar o processo.

Outras dicas

Extensões OpenGL são novos recursos adicionados ao Especificação OpenGL, eles são adicionados pelo órgão de padrões OpenGL e pelos vários fornecedores de placas gráficas.Eles são expostos ao programador como novas chamadas de função ou variáveis.Cada nova versão da especificação OpenGL vem com funcionalidades mais recentes e (normalmente) inclui todas as funcionalidades e extensões anteriores.

O verdadeiro problema com as extensões OpenGL existe apenas no Windows.A Microsoft não oferece suporte a nenhuma extensão lançada após OpenGL v1.1.Os fornecedores de placas gráficas superam isso enviando sua própria versão dessa funcionalidade por meio de arquivos de cabeçalho e bibliotecas.No entanto, usar isso pode ser um pouco doloroso, como mostra a pergunta que você vinculou.Mas este problema desapareceu principalmente com a popularidade do GLEW, que se encarrega de agrupar tudo isso em um pacote fácil de usar.

Se você usar uma extensão OpenGL muito recente, esteja ciente de que ela pode não ser compatível com hardware gráfico mais antigo.Fora isso, não há outra desvantagem em usar essas extensões.A maioria das extensões que se tornam padrão são bastante malditas útil e há muito pouca lógica para não usá-los.

As extensões são, em geral, uma forma de os fornecedores de placas gráficas adicionarem novas funcionalidades ao OpenGL sem ter que esperar até a próxima revisão das especificações do OpenGL.Existem diferentes tipos de extensões:

  1. Extensão do fornecedor – apenas um fornecedor fornece um determinado tipo de funcionalidade.
    • Exemplo: NV_vertex_program
  2. Extensão de vários fornecedores – vários fornecedores se reuniram e concordaram com a funcionalidade.
    • Exemplo: EXT_vertex_program
  3. Extensão ARB - o OpenGL Architecture Review Board abençoou a extensão.Você tem uma expectativa razoável de que esse tipo de extensão ainda existirá por um tempo.
    • Exemplo: ARB_vertex_program

As extensões não precisam passar por todas essas etapas.Às vezes, uma extensão só é implementada por um fornecedor, antes que os projetos de hardware sigam um caminho diferente e a extensão seja abandonada.Outras vezes, uma extensão pode chegar ao status ARB antes que todos decidam que há uma maneira melhor.(O ARB_vertex_program abordagem, por exemplo, foi posta de lado em favor da abordagem de linguagem de sombreamento de alto nível de ARB_vertex_shader quando chegou a hora de incluir shaders nas especificações principais do OpenGL.) Mesmo as extensões ARB não duram para sempre;Eu não escreveria algo hoje que exigisse ARB_matrix_palette, por exemplo.

Dito isso, é uma boa ideia manter-se atualizado sobre as extensões, em particular as extensões ARB e EXT mais recentes.No passado, era verdade que alguns dos “caminhos rápidos” através do hardware só eram acessíveis através de extensões.Da mesma forma, se você quiser saber quais funcionalidades uma peça de hardware pode fazer, não há lugar melhor para procurar do que uma extensão específica do fornecedor.

Se você está apenas começando no OpenGL, recomendo investigar:

  • ARB_vertex_buffer_object (vértices)
  • ARB_vertex_shader / ARB_fragment_shader / ARB_shader_objects / Especificação GLSL (shaders)

Mais avancado:

  • ARB/EXT_framebuffer_object (renderização fora da tela)

Todas essas funcionalidades foram incorporadas ao núcleo, mas pode ser bom vê-las isoladamente para que você possa ter uma noção melhor de onde estão seus limites.(A especificação principal do OpenGL combina perfeitamente o antigo com o novo, então isso pode ser muito importante se você quiser permanecer no caminho mais rápido e evitar o legado e, às vezes, implementado em caminhos de software.)

Faça o que fizer, certifique-se de ter verificações apropriadas para as extensões que decidir usar e alternativas quando necessário.Mesmo que sua placa tenha uma determinada extensão, não há garantia de que a extensão estará presente na placa de outro fornecedor ou mesmo em outro sistema operacional com a mesma placa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top