К сожалению, любая программа OpenGL запускается только в режиме OpenGL 3.1.
Не любая программа GL сделает это. Только старые программы, использующие создание устаревшего контекста (поэтому они даже не знают или не заботятся о существовании различных профилей), получат эту версию.
(профиль совместимости).
На самом деле, профиль совместимости OpenGL 3.1 даже не существует. Профили были введены в OpenGL 3.2, даже если его интерпретация немного отличается. Технически, mesa llvmpipe просто не поддерживает профили совместимости.
Есть ли способ запуска программ OpenGL с профилем ядра 3.3?
Бесполезно. Если программа использует создание унаследованного контекста, она либо не знает о более новых функциях GL (и не сможет их использовать как следствие), либо просто ломается и просто предполагает получить более новую версию GL, которая является ничем на программу можно положиться в соответствии со спецификацией c.
В любом случае, если программа не написана для основного профиля OpenGL, она, скорее всего, будет работать неправильно, поскольку многие устаревшие функциональные возможности устарели. просто недоступен в профилях ядра.
Ваш пример glxgears
просто сгенерирует много ошибок GL и покажет только черный экран, который не запускается в профиле ядра, потому что он использует списки отображения и команды рендеринга в непосредственном режиме и конвейер с фиксированными функциями, которых нет в профиле ядра OpenGL.
Несмотря на то, что, скорее всего, совершенно бесполезно, чтобы программа использовала профиль ядра OpenGL, который его не запрашивает, вы можете изменить исходный код, или вы можете как-то вмешиваться в его создание контекста п операций. В какой-то иронии c поворота событий я сам всего за несколько дней go добавил некоторую функциональность в мой glx_hook
хак, который фактически позволяет изменять контекст, который запрашивает приложение без необходимости изменения исходного кода.