Как снова протестировать шейдеры другой версии модели шейдеров - PullRequest
1 голос
/ 25 июля 2011

У меня много шейдеров OpenGl. Мы стараемся использовать как можно больше различного оборудования для оценки переносимости нашего продукта. Один из наших клиентов недавно столкнулся с некоторыми проблемами рендеринга. Похоже, что целевая машина предоставляет только версию шейдеров модели 2.0 всю нашу машину для разработки / сборки / тестирования (даже самые старые из них работают под управлением 4.0 ) все остальное (версия OpenGl, версия GSLS ...) кажется идентичным.

Я не нашел способа понизить версию модели шейдеров, поскольку она автоматически предоставляется драйвером графической карты.

Можно ли вручную установить или выбрать версию модели OpenGl / GLSL / шейдера, используемую для целей разработки / тестирования?

ПРИМЕЧАНИЕ: основной целью являются Windows XP SP2 / 7 (32 и 64) для обеих карт ATI / NVIDIA

1 Ответ

3 голосов
/ 26 июля 2011

OpenGL не имеет понятия «модели шейдеров»; это вещь Direct3D. Он имеет только версии GLSL: 1.10, 1.20 и т. Д.

Каждая версия OpenGL соответствует определенной версии GLSL. GL 2.1 поддерживает GLSL 1.20. GL 3.0 поддерживает GLSL 1.30. Для GL 3.3 и выше, они перестали дурачиться и просто использовали тот же номер версии, поэтому GL 3.3 поддерживает GLSL 3.30. Таким образом, между GLSL 1.50 (соответствует GL 3.2) и GLSL 3.30 существует странный разрыв в номере версии.

Технически, реализациям OpenGL разрешено отказываться от компиляции более старых версий шейдеров, чем те, которые соответствуют текущей версии. Однако на практике вы можете в значительной степени внедрить любой шейдер GLSL в любую реализацию OpenGL, если версия шейдера меньше или равна версии, поддерживаемой реализацией OpenGL. Это не было протестировано на MacOSX Lion с реализацией ядра GL 3.2.

Существует одно исключение: основные контексты . Если вы попытаетесь передать шейдер через основной контекст OpenGL, который использует функции, удаленные из ядра, он будет жаловаться.

Нет способа заставить OpenGL предоставить вам определенную версию OpenGL. Вы можете задать это с помощью wgl / glXCreateContextAttribs. Но это позволяет вам получить любую версию выше той, которую вы запрашиваете, при условии, что эта версия обратно совместима с тем, что вы просили.

...