LibGdx Shader(“着色器中没有带名称'u_texture'的制服”)

问题描述 投票:2回答:2

Shader成功编译,但是一旦渲染开始,程序就会崩溃......这就是我得到的错误:“在着色器中没有名称'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一起工作。

opengl opengl-es libgdx glsl shader
2个回答
6
投票

libGDX的SpriteBatch假设您的着色器将具有u_texture制服。要克服,只需在将着色器程序放入SpriteBatch之前添加ShaderProgram.pedantic = false;(Javadoc)

更新:raveesh关于着色器编译器消失未使用的制服和属性是正确的,但libGDX在自定义ShaderProgram中包装OpenGL着色器。


2
投票

您不仅应该在着色器程序中添加统一的u_texture,还应该使用它,否则它将被着色器编译器优化掉。但是看着你的着色器,你似乎不需要制服,所以检查一下像shader.setUniformi("u_texture", 0);这样的程序并删除线。它应该工作正常。

© www.soinside.com 2019 - 2024. All rights reserved.