'texture':未找到匹配的重载函数,即使它*应该*符合文档

'texture' : no matching overloaded function found even though it *should* comply with documentation

我正在尝试将 OpenGL glsl 着色器转换为 OpenGL ES 着色器,但似乎效果不佳。 着色器在普通 OpenGL 中完美运行,但在 OpenGL ES 中完全崩溃。 这是正常的 OpenGL glsl 代码:

#version 330
uniform sampler2D texture0;
float amnt = 8.0;
vec2 uv = gl_FragCoord.xy / vec2(1270,720).xy;
void main() {
   float thing = -1.0; 
   if (uv.y <= 0.5) {
      thing = 1.0;
   }
   uv.y += distance(uv.x, 0.5) * (distance(uv.x, 0.5) * 0.25 ) * distance(uv.y, 0.5) * thing * amnt;

   
   
   gl_FragColor = texture(texture0, vec2(uv.x, uv.y));
}

OpenGL ES glsl代码:

precision highp float;
uniform sampler2D texture0;
void main() {

    const float amnt = 8.0; 
    const vec2 resol = vec2(1270,720); 
    vec2 uv = gl_FragCoord.xy / resol.xy;
    float thing = -1.0; 
    if (uv.y <= 0.5) {
      thing = 1.0;
    }
   uv.y += distance(uv.x, 0.5) * (distance(uv.x, 0.5) * 0.25 ) * distance(uv.y, 0.5) * thing * amnt;

   
   
   gl_FragColor = texture(texture0, vec2(uv.x, uv.y));
}

使用此代码我得到以下错误:

SHADER_INFO_LOG:
ERROR: 0:18: 'texture' : no matching overloaded function found
ERROR: 0:18: '=' : dimension mismatch
ERROR: 0:18: 'assign' : cannot convert from 'const mediump float' to 'FragColor mediump 4-component vector of float'

这两个着色器都是片段着色器。

texture() 添加到 #version 300 es

#version 100 es(如果没有指定#version则默认)被限制为texture2D()/texture2DProj()/texture2DLod()/texture2DProjLod()/ textureCube()/textureCubeLod().

请参阅 OpenGL ES Shading Language 1.00 Specification 中的第 8.7 节“纹理查找函数”(第 71-72 页)。