GLSL 'texture2D': не найдена соответствующая перегруженная функция OpenGL ES2 на iPhone - PullRequest
3 голосов
/ 29 января 2011

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

'texture2D' : no matching overloaded function found 

Это происходит с этим кодом, где "final "- это переменная vec4 для хранения цвета над которым мы работаем.Идея здесь состоит в том, чтобы оттолкнуть цвет пикселя дальше от окружающих (экспериментальная идея).Я отмечу строку в коде с ошибкой.

highp vec4 tex = texture2D(tex,vec2(texcoord.x+1.0,texcoord.y));
highp float total = tex.r + tex.g + tex.b;
tex = texture2D(tex,vec2(texcoord.x-1.0,texcoord.y)); <----This one as well as the next similar lines
total += tex.r + tex.g + tex.b;
tex = texture2D(tex,vec2(texcoord.x,texcoord.y+1.0));
total += tex.r + tex.g + tex.b;
tex = texture2D(tex,vec2(texcoord.x,texcoord.y-1.0));
total += tex.r + tex.g + tex.b;
highp float di = 12.0;
highp vec4 close_av = total/di;
final = (final - close_av)*1.3+close_av;

Почему это не работает?Спасибо.

1 Ответ

7 голосов
/ 29 января 2011

Предполагая, что tex первоначально был объявлен как uniform sampler2D в верхней части источника вашего шейдера, он будет объявлен как локальная переменная в первой строке вашего фрагмента, что скрывает исходное определение.Изменение любой переменной, чтобы их имена различались, должно исправить ваши проблемы компиляции.

...