¿Cuál es la diferencia entre todas las cadenas de versiones diferentes en la salida del comando glxinfo?
Ya pregunté esto aquí, pero no obtuve muchas respuestas y, de todos modos, parece que hay más preguntas relacionadas en AskUbuntu.
La salida de glxinfo|grep OpenGL
sigue,
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 qué el "perfil central" es 4.5, mientras que la cadena de versión de OpenGL es 3.0?
Respuesta aceptada:
OpenGL ES es un subconjunto de la especificación OpenGL original y está diseñado para sistemas integrados como teléfonos inteligentes. No estoy 100% seguro de por qué los números de versión no se corresponden, pero no es así. La última versión es 4.5 para OpenGL y 3.2 para OpenGL ES. Esto explica el motivo de la parte OpenGL ES de su salida. En tu caso, tienes soporte para las últimas versiones tanto de OpenGL como de OpenGL ES.
Notará que las entradas de OpenGL y OpenGL ES tienen una cadena de versión y una cadena de versión de idioma de sombreado. Antes de OpenGL 3.3, el número de versión de OpenGL y el número de versión del lenguaje de sombreado no coincidían. Creo que esta es la razón por la que tienen entradas separadas en la salida (ya que obviamente pueden ser diferentes para hardware antiguo). Como se ve en su salida, el número de versión (4.5) coincide con la versión del lenguaje de sombreado (también 4.5).
La parte más difícil (y la parte de la que no estoy 100 % seguro) es la "cadena de versión de OpenGL".
Por lo que he visto en varias máquinas completamente diferentes, esto parece estar limitado a la versión 3.0. La versión del lenguaje de sombreado para 3.0 es 1.3, por lo que la cadena de la versión del lenguaje de sombreado tiene sentido para esta versión de OpenGL. Sin embargo, ¿por qué la versión está limitada a 3.0? Mis pensamientos son los siguientes:
La versión 3.0 introdujo la obsolescencia (ver este enlace). Aquí también es de donde provienen los dos perfiles separados, "Core" y "Compatibility". Cualquier implementación de OpenGL solo tiene que implementar la especificación "básica" para ser válida.
Relacionado:¿Mac OS X no arranca desde el menú grub en Ubuntu Precise en Apple MBA (5,2)?Si lee las notas de la versión de Mesa para una versión en particular, verá una declaración relacionada con este problema de perfil de compatibilidad/núcleo. Lo siguiente se tomó de las notas de la versión de la última versión 17.0.0 aquí:
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.
Tenga en cuenta la última parte “OpenGL 4.5 solo está disponible si se solicita en la creación del contexto porque los contextos de compatibilidad no son compatibles” . Por lo tanto, creo que la "cadena de versión de OpenGL" es la versión admitida para un contexto de perfil de "compatibilidad" (o, en otras palabras, para la compatibilidad con cualquier función obsoleta anterior a la versión 3.0).