2013-09-26 2 views
8

Как лучше всего найти версию GLSL, которую поддерживает OpenGL, таким образом, чтобы ее можно было надежно использовать программно?Поиск поддерживаемой версии GLSL

Это лучший способ получить строку GL_SHADING_LANGUAGE_VERSION и попытаться ее разобрать? Можно ли полагаться на то, чтобы его возвращали в четко определенном формате? Мой драйвер Intel возвращает 1.20, что достаточно просто для синтаксического анализа, но моя карточка nVidia возвращает 4.20 NVIDIA via Cg compiler. Можно ли быть уверенным в том, что он соответствует регулярному выражению (\d+)\.(\d+)(.*)?? This answer, как представляется, указывает обратное, возвращается OpenGL ES GLSL ES 1.0.

Правильно ли это, и/или есть какой-то другой способ? В частности, я хочу проверить, что поддерживается как минимум GLSL 1.20.

ответ

13

Там есть конкретные соответствия между версией OpenGL и поддерживаемой версии GLSL:

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

Там очень хорошо определен API для запроса версии OpenGL. Используйте таблицу выше для сопоставления с версиями GLSL (после OpenGL-3.3 это очень логично).

Кроме того, спецификация определяет формат GL_VERSION и GL_SHADING_LANGUAGE_VERSION к

начинаются с номером версии. Номер версии используется один из следующих форм:

major_number.minor_number | major_number.minor_number.release_number 
+0

Что касается соответствия между версиями OpenGL и версии GLSL, правда ли это не только то, что определенная OpenGL версия поддерживает соответствующую версию GLSL, но и то, что определенная Версия GLSL * * поддерживается только соответствующей версией OpenGL, а не предыдущей версией (как расширение)? – Dolda2000

+0

А что касается формата строки 'GL_SHADING_LANGUAGE_VERSION', значит ли это, что ответ, который я связал в вопросе, либо неточно передается, либо что Apple является несоответствующим; или GLES отличается? – Dolda2000

+0

@ Dolda2000: С момента создания ядра OpenGL-3.3 все разработки, касающиеся основных элементов (например, GLSL), приведут к новой версии OpenGL. Больше не будет расширений GLSL (за исключением, конечно, специфических для поставщика расширений). OpenGL-ES - это другой зверь с разными правилами, чем OpenGL. – datenwolf

Смежные вопросы