'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 页)。
我正在尝试将 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 页)。