我正在尝试使用 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;

为什么它不起作用?谢谢你。

最佳答案

假设 tex 最初在着色器源代码的顶部被声明为 uniform sampler2D,则代码片段的第一行将其重新声明为局部变量,从而隐藏了原始定义。更改任一变量以保持其名称不同应该可以解决您的编译问题。

关于iphone - GLSL 'texture2D' : no matching overloaded function found OpenGL ES2 on iPhone,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4834820/

10-10 20:28