2011-12-23 5 views
1

Новые версии GLSL уменьшают количество стандартных, встроенных атрибутов и униформ, например. gl_Color и gl_ModelViewMatrix не входят в состав GLES 2.0.Переопределение атрибутов в GLSL

Можно ли переопределить эти имена и переопределить их в шейдере другого типа переменной? Объявлял бы свою собственную форму gl_ModelViewMatrix при работе на ранней версии GLSL, если вы сами установили ее?

В начале GLSL gl_Color может быть за вершиной или для всего вызова, в зависимости от того, если клиент называется glColor() или glColorPointer() - вы можете установить атрибут один раз, так оно в действительности становится униформу? Или как справиться с этой двусмысленностью?

(Это все в поисках, чтобы сделать шейдеры, которые работают по целому ряду целей с некоторыми просто находка замены скриптов на время загрузки)

ответ

2

Вы не можете изменить их, и вы не можете используйте переменные-имена с началом «gl _» (об этом мне сказал документ). Изменение встроенных типов/переменных невозможно вообще.

+2

К сожалению, я не могу найти документы, но я» Конечно, это правильно. –

+0

В стандарте OpenGL-3 и GLSL 1.40 четко указано, что пользовательские переменные не должны называться с префиксом «gl_». Однако однажды можно использовать немного препроцессорного обмана, чтобы, по-видимому, «повторно ввести» их. – datenwolf

+0

@ datenwolf Да, это был мой план, хотя я немного застрял в gl_Color – Will

1

Лучше всего, если вы хотите легко поддерживать несколько версий GLSL, является использование макросов. Например, вы можете определить свой входной цвет, как:

#ifndef color 
in vec4 color; 
#endif 

Затем, чтобы работать на старой версии GLSL, вы предварять шейдер с #define color gl_Color

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