Я пытаюсь реализовать некоторые шейдеры из онлайн-учебников (lighthouse3d.com) в моем движке OpenGL ES 2.0.
Проблема в том, что по какой-то причине ЛЮБЫЕ переменные, объявленные в области действия main (), вызывают сбой всего шейдера. например, это терпит неудачу:
void main(){
vec4 color;
gl_FragColor = vec4(1.0, 0.5, 0.5, 1.0);
}
но это прекрасно работает:
void main(){
//vec4 color;
gl_FragColor = vec4(1.0, 0.5, 0.5, 1.0);
}
То же самое происходит с моими вершинными шейдерами. ( EDIT : nvm, кажется, только с фрагментными шейдерами) Единственный способ использовать любой тип непостоянного значения - это использовать атрибуты, вариации, униформы и т.д., например, это работает так, как вы ожидаете:
uniform sampler2D texture;
varying lowp vec4 fragcol;
varying lowp vec2 texco;
void main(){
gl_FragColor = fragcol * texture2D(texture, texco);
}
Кроме того, у меня чертовски много проблем, когда я пытаюсь найти документацию или ресурсы, конкретно касающиеся GLSL ES (или как называется эта версия). Все, что я смог найти, это: http://old.siggraph.org/publications/2006cn/course16/KhronosSpecs/ESLanguageSpec1.10.11.pdf
Это все, что я мог найти в связи с объявлениями переменных:
[snip] Типы по умолчанию отсутствуют. Все объявления переменных и функций
должен иметь объявленный тип и, необязательно, квалификаторы. Переменная
объявляется путем указания его типа, за которым следует одно или несколько имен
через запятую. [snip]
И именно это я и сделал:
заявленный тип: vec4
, за которым следуют одно или несколько имен: color ;
vec4 color
Я не в курсе
EDIT:
GLES20.glGetError () выдает ошибку 1282