Fazendo sentido das versões do OpenGL glxinfo

4

Qual é a diferença entre todas as diferentes seqüências de versão na saída do comando glxinfo?

Já pedi isso aqui , mas não obtive muitas respostas e, de qualquer forma, parece que existem mais perguntas relacionadas no AskUbuntu.

A saída de glxinfo|grep OpenGL segue,

 glxinfo |grep Open
    Vendor: Intel Open Source Technology Center (0x8086)
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) HD Graphics 520 (Skylake GT2) 
OpenGL core profile version string: 4.5 (Core Profile) Mesa 13.0.2
OpenGL core profile shading language version string: 4.50
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 13.0.2
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 13.0.2
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
OpenGL ES profile extensions:
.

Por que o "core profile" 4.5, enquanto a versão do OpenGL é 3.0?

    
por Mali Remorker 23.02.2017 / 16:18

1 resposta

4

O OpenGL ES é um subconjunto da especificação original do OpenGL e foi projetado para sistemas embarcados, como smartphones. Eu não estou 100% certo porque os números da versão não correspondem, mas eles não. A última versão é 4.5 para OpenGL e 3.2 para OpenGL ES. Isso explica o motivo da parte do OpenGL ES de sua saída. No seu caso, você tem suporte para as versões mais recentes do OpenGL e do OpenGL ES.

Você notará que as entradas OpenGL e OpenGL ES possuem uma string de versão e uma string de versão de linguagem de sombreamento. Antes do OpenGL 3.3, o número da versão do OpenGL e o número da versão do idioma de sombreamento não correspondiam. Acredito que essa é a razão pela qual eles têm entradas separadas na saída (já que obviamente podem ser diferentes para hardware mais antigo). Como visto em sua saída, o número da versão (4.5) corresponde à versão da linguagem de sombreamento (também 4.5).

A parte mais difícil (e a parte da qual não tenho 100% de certeza) é a "string de versão do OpenGL".

Pelo que vi em várias máquinas completamente diferentes, isso parece estar limitado à versão 3.0. A versão da linguagem de sombreamento para o 3.0 é 1.3, portanto, a string de versão do idioma de sombreamento faz sentido para essa versão do OpenGL. No entanto, por que a versão é limitada a 3.0? Meus pensamentos são os seguintes:

A versão 3.0 introduziu a desaprovação (consulte este link ). É também de onde vieram os dois perfis separados, "Core" e "Compatibility". Qualquer implementação do OpenGL só precisa implementar a especificação "core" para ser válida.

Se você ler as notas de versão do Mesa para uma versão específica, verá uma declaração relacionada a esse problema de perfil de compatibilidade / núcleo. O texto a seguir foi retirado das notas de lançamento da última versão 17.0.0 aqui :

Mesa 17.0.0 implements the OpenGL 4.5 API, but the version reported by glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) / glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used. Some drivers don't support all the features required in OpenGL 4.5. OpenGL 4.5 is only available if requested at context creation because compatibility contexts are not supported.

Observe a última parte "O OpenGL 4.5 só estará disponível se solicitado na criação do contexto, porque os contextos de compatibilidade não são suportados" . Portanto, acho que a "cadeia de versão do OpenGL" é a versão suportada para um contexto de perfil de "compatibilidade" (ou, em outras palavras, para suporte a qualquer recurso obsoleto anterior à versão 3.0).

    
por gsxruk 24.02.2017 / 18:50