Понимание версий OpenGL glxinfo

В чем разница между строками разных версий в выходных данных команды glxinfo?

Я уже задавал это здесь, но не получил много ответов и, в любом случае, похоже, что в AskUbuntu есть больше связанных вопросов.

Выход из glxinfo|grep OpenGL следует,

 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:
.

Почему "основной профиль" 4.5, а версия OpenGL - 3.0?

1 ответ

OpenGL ES является подмножеством исходной спецификации OpenGL и предназначен для встроенных систем, таких как смартфоны. Я не уверен на 100%, почему номера версий не соответствуют, но они не соответствуют. Последняя версия - 4.5 для OpenGL и 3.2 для OpenGL ES. Это объясняет причину для части OpenGL ES вашего вывода. В вашем случае у вас есть поддержка последних версий OpenGL и OpenGL ES.

Вы заметите, что записи OpenGL и OpenGL ES имеют строку версии и строку версии на языке затенения. До OpenGL 3.3 номер версии OpenGL и номер версии языка затенения не совпадали. Я полагаю, что по этой причине они имеют отдельные записи в выводе (поскольку они, очевидно, могут отличаться для более старого оборудования). Как видно из вашего вывода, номер версии (4.5) совпадает с версией языка затенения (также 4.5).

Самая сложная часть (и та, в которой я не уверен на 100%) - это "строка версии OpenGL".

Из того, что я видел на нескольких совершенно разных машинах, эта версия ограничена версией 3.0. Версия языка затенения для версии 3.0 - 1.3, поэтому для этой версии OpenGL имеет смысл строка версии языка затенения. Однако почему версия ограничена на 3.0? Мои мысли таковы:

Версия 3.0 ввела устаревание (см. Эту ссылку). Это также то, откуда пришли два отдельных профиля: "Ядро" и "Совместимость". Любая реализация OpenGL должна реализовывать только "базовую" спецификацию, чтобы быть действительной.

Если вы прочитаете примечания к выпуску Mesa для конкретной версии, вы увидите заявление, касающееся этой проблемы с профилем ядра / совместимости. Следующее было взято из примечаний к выпуску для последней версии 17.0.0 здесь:

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.

Обратите внимание на последнюю часть "OpenGL 4.5 доступен только при запросе при создании контекста, потому что контексты совместимости не поддерживаются". Поэтому я думаю, что "строка версии OpenGL" является поддерживаемой версией для контекста профиля "совместимости" (или, другими словами, для поддержки любой устаревшей функции до версии 3.0).

Другие вопросы по тегам