В ходе работы с шейдерами возникли следующие полезные заметки по совместимости:

1) #version 120 — строка с указанием версии шейдера должна быть самой первой в коде, иначе ATI ругается при компиляции. У меня такая ошибка появилась в результате сборки шейдера из частей.

2) старые ATI и большинство карт INTEL не поддерживают glsl шейдеры, вместо этого у них есть расширения только GL_ARB_VERTEX_PROGRAM, GL_ARB_FRAGMENT_PROGRAM. Выход здесь есть и весьма лаконичный — скачать библиотеку CG от NVidia и перекомпилировать шейдеры в arb программы.

Например: cgc -glsl shader.glsl -profile arbvp1 -o vertex.vp

В данном случае профиль arbvp1 для вершинных программ, а arbfp1 — для фрагментных.

3) В появлением glsl шейдеров, команда glGetString дополнилась новым возможным аргументом GL_SHADING_LANGUAGE_VERSION, который возвращает версию glsl шейдера.

4) У NVidia есть весьма полезная утилита ShaderPerf — анализ шейдера на количество инструкций и скорость выполнения, а также прогонка выполнения шейдера под разные видеокарты и семейства графических чипсетов NVidia. ?меется также возможность сравнить выполнение двух разных шейдеров между собой.

5) не следует указывать вещественные числа с f в конце как 1.0f, достаточно просто написать 1.0. Также ATI очень привередливы к указанию вещественного числа без дробной части.

6) Полезная утилита OpenGL Extension Viewer с базой данных по поддерживаемым расширением для большинства видеокарт. http://www.realtech-vr.com/glview/

Заметки к GLSL шейдерам и их совместимости
Метки:        

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *