Подтвердить что ты не робот

Получите поддерживаемые версии GLSL

При разработке на ноутбуке с графической картой Intel при компиляции вершинного шейдера я получил следующее:

0:1(10): error: GLSL 3.30 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, and 3.00 ES

ok, поэтому я адаптирую шейдер для использования версии 300 ES. Между тем, я хочу проверить, какие версии GLSL поддерживает текущий драйвер/карту, поэтому я использую это:

glGetString ( GL_SHADING_LANGUAGE_VERSION )

Что, к моему ужасу, возвращает только "1.30".

Как я могу получить полный список? Или даже если это не полный список, как я могу получить стандартные поддерживаемые версии GL и поддерживаемые версии GLES?

4b9b3361

Ответ 1

В настольном GL сопоставление между версией GL и версией GLSL выглядит следующим образом:

GL version                     GLSL version
2.0                            1.10
2.1                            1.20
3.0                            1.30
3.1                            1.40
3.2                            1.50
3.3                            3.30
4.0                            4.00
4.1                            4.10
4.2                            4.20
4.3                            4.30
4.4                            4.40
4.5                            4.50
...

Итак, начиная с GL 3.3, номера версий "синхронизируются", чтобы облегчить жизнь. Также обратите внимание, что нет явной версии 1.00. Это было доступно, когда шейдеры были разработаны как расширение для GL 1.x. Тем не менее, это никогда не было основной особенностью OpenGL, поэтому версия начинается с 1.10 здесь (это также значение по умолчанию, если у вас нет директивы #version в вашем шейдере). Если вы запросите #version 100, вы получите GLSL 1.00 ES.

Обратите внимание: кроме того, что для поддержки перечисленных версий GLSL требуется поддержка gre, для реализации более старых версий также требуются реализации GL. Например, в спецификации основного профиля OpenGL 4.5 указано следующее (выделено мной):

Реализации OpenGL 4.5 гарантируют поддержку версии 4.50 язык затенения OpenGL. Все ссылки на разделы этого спецификация относится к этой версии. Последняя поддерживаемая версия язык затенения может быть запрошен, как описано в разделе 22.2. The основной профиль OpenGL 4.5 также гарантированно поддерживает все предыдущие версии OpenGL Shading Language для версии 1.40. В некоторых реализации, основной профиль может также поддерживать более ранние версии язык затенения и может поддерживать версии профиля совместимости языка затенения для версий 1.40 и ранее. В этом случае ошибки будут возникать при использовании языковых функций, таких как встроенные модули профиля совместимости поддерживаемый API-интерфейсом основного профиля.

Для OpenGL ES применяются похожие вещи:

GLES version                  GLSL version
2.0                            1.00 ES
3.0                            3.00 ES
3.1                            3.10 ES

с GLES 3.1 spec, указав

Реализации OpenGL ES 3.1 гарантируют поддержку версий 3.10, 3.00 и 1.00 языка затенения OpenGL ES.

Теперь вы все равно можете узнать, какие версии GLSL ES вы можете использовать на настольном компьютере GL. Итак, для современного GL это довольно просто. Чтобы снова указать спецификацию GL 4.5:

Реализации OpenGL 4.5 гарантируют поддержку версий 1.00, 3.00 и 3.10 языка затенения OpenGL ES.

Поддержка функций, специфичных для GLES в настольном GL (например, ES-варианты GLSL), обычно обрабатываются с помощью расширений "совместимости":

Теперь ваша реализация может обеспечить только GL 3.0 и по-прежнему поддерживать расширения совместимости с ES.

Так как GL 4.3, вы можете просто запросить список всех поддерживаемых версий GLSL с помощью glGetStringi(GL_SHADING_LANGUAGE_VERSION,...). Для версий до этого вам нужно проверить номер версии GL и строки расширения, чтобы определить, какие версии гарантированно будут поддерживаться (но реализация может по-прежнему поддерживать больше).