Opengl LibGdx着色器(“着色器中的名称和纹理不一致”)

Opengl LibGdx着色器(“着色器中的名称和纹理不一致”),opengl,opengl-es,libgdx,glsl,shader,Opengl,Opengl Es,Libgdx,Glsl,Shader,着色器编译成功,但程序在渲染开始后立即崩溃。。。这就是我得到的错误:“着色器中没有名称为“u_纹理”的统一体”。这就是我的着色器的外观: #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 )

着色器编译成功,但程序在渲染开始后立即崩溃。。。这就是我得到的错误:“着色器中没有名称为“u_纹理”的统一体”。这就是我的着色器的外观:

#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);
}
\ifdef glu
精密中泵浮子;
#恩迪夫
均匀浮动时间;
均匀vec2小鼠;
均匀vec2分辨率;
可变vec2表面沉积;
#定义最大值为10
真空总管(真空){
vec2 p=表面位置*4.0;
vec2i=p;
浮点数c=0.0;
浮动强度=1.0;
对于(int n=0;n

谁能帮帮我吗。我不知道我做错了什么。顺便说一句,这是我在互联网上找到的着色器,所以我知道它正在工作,唯一的问题是让它与libgdx一起工作。

不仅应该在着色器程序中添加均匀的u_纹理,还应该使用它,否则它将被着色器编译器优化掉。
但是看看你的着色器,你似乎并不需要统一的,所以检查你的程序,比如
shader.setUniformi(“u_纹理”,0)
并删除该行。它应该可以正常工作。

libGDX的SpriteBatch假设着色器将具有
u_纹理
uniform。要克服困难,只需添加
ShaderProgram.pedantic=false代码


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

这个错误不是很清楚吗?Libgdx使用统一变量
u_texture
处理某些内容,并且您的着色器必须具有它。我计算了同样多的值,但即使添加了它,错误仍然保持不变。您确定错误是相同的吗?你到底是如何添加这个变量的?我刚刚添加了2D u_纹理;在着色器程序中