LibGdx着色器(“在着色器中没有统一的名称'u_texture'))
问题描述:
着色器编译成功,但程序一旦渲染就开始崩溃......这是我得到的错误:”没有统一名称'u_texture'在着色器中“。这是我的着色器的样子:LibGdx着色器(“在着色器中没有统一的名称'u_texture'))
#ifdef GL_ES
precision mediump float;
#endif
uniform float time;
uniform vec2 mouse;
uniform vec2 resolution;
varying vec2 surfacePosition;
#define MAX_ITER 10
void main(void) {
vec2 p = surfacePosition*4.0;
vec2 i = p;
float c = 0.0;
float inten = 1.0;
for (int n = 0; n < MAX_ITER; n++) {
float t = time * (1.0 - (1.0/float(n+1)));
i = p + vec2(
cos(t - i.x) + sin(t + i.y),
sin(t - i.y) + cos(t + i.x)
);
c += 1.0/length(vec2(
p.x/(sin(i.x+t)/inten),
p.y/(cos(i.y+t)/inten)
)
);
}
c /= float(MAX_ITER);
gl_FragColor = vec4(vec3(pow(c,1.5))*vec3(0.99, 0.97, 1.8), 1.0);
}
有人可以帮助我。我不知道我做错了什么。顺便说一句,这是我在网上找到的着色器,所以我知道它正在工作,唯一的问题是使它与libgdx一起工作。
答
libGDX的SpriteBatch假定着色器的'u_texture'是统一的。在将着色器程序放入SpriteBatch之前,只需添加 shaderProgram.pedantic = false;
(Javadoc)即可。
更新:raveesh是正确的着色编译器消失未使用的制服和属性,但libGDX包装OpenGL着色器自定义ShaderProgram。
答
您不仅应该在着色器程序中添加统一的u_texture,还应该使用它,否则它将被着色器编译器优化掉。 但是看着你的着色器,你似乎无论如何都不需要制服,所以请检查你的程序,找到类似shader.setUniformi("u_texture", 0);
的东西并删除该行。它应该工作得很好。
这个错误是不是很明显? Libgdx使用统一变量'u_texture'作为东西,你的着色器必须拥有它。 – HolyBlackCat 2015-01-15 16:15:37
我想尽可能多,但即使添加它后,错误仍然相同 – user1176999 2015-01-15 16:16:49
你确定错误是一样的吗?你究竟如何添加这个变量? – HolyBlackCat 2015-01-15 16:19:28