Java 灰度着色器不工作,正在删除alpha渲染

Java 灰度着色器不工作,正在删除alpha渲染,java,opengl,opengl-es,libgdx,Java,Opengl,Opengl Es,Libgdx,我正在尝试开发一个着色器,它只是一个简单的灰度着色器。游戏正在运行,但着色器没有任何效果,之前使用0.5 Alpha渲染的任何纹理现在看起来都像是使用完全Alpha渲染的 灰度垂直 uniform mat4 u_projTrans; attribute vec4 a_position; attribute vec2 a_texCoord0; attribute vec4 a_color; varying vec4 v_color; varying vec2 v_texCoord;

我正在尝试开发一个着色器,它只是一个简单的灰度着色器。游戏正在运行,但着色器没有任何效果,之前使用0.5 Alpha渲染的任何纹理现在看起来都像是使用完全Alpha渲染的

灰度垂直

uniform mat4 u_projTrans;

attribute vec4 a_position;
attribute vec2 a_texCoord0;
attribute vec4 a_color;

varying vec4 v_color;
varying vec2 v_texCoord;

    void main(){

        gl_Position = u_projTrans * a_position;
        v_texCoord = a_texCoord0;
        v_color = a_color;

}
灰度图

#ifdef GL_ES
precision mediump float;
precision mediump int;
#else
#define highp;
#endif

uniform sampler2D u_texture;

varying vec4 v_color;
varying vec2 v_texCoord;

const vec3 grayScaleMultiplier = vec3(0.299,0.587,0.114);

void main(){
    vec4 texColor = texture2D(u_texture,v_texCoord);
    vec3 gray = vec3(dot(texColor.rgb,grayScaleMultiplier));
    gl_FragColor = vec4(gray.r,gray.g,gray.b,texColor.a);
}
以及如何应用着色器

shaderProgram = new ShaderProgram(Gdx.files.internal("shaders/grayscale.vert"),Gdx.files.internal("shaders/grayscale.frag"));
        testBatch.setShader(shaderProgram);

        if(!shaderProgram.isCompiled()) {
            System.out.println(shaderProgram.getLog());
        }
我的渲染调用

    Gdx.gl20.glClearColor(1,1,1,255);
    Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT);
    mapLayerManager.render();

   batch.begin();

  for(AbstractEnemy enemy : allEnemys){
        enemy.render(batch);
  }
  batch.end();

  lightManager.render(batch);

  shapeRenderer.begin();
  shapeRenderer.setColor(0,0,0,100);
  shapeRenderer.set(ShapeRenderer.ShapeType.Filled);
  for(AbstractEnemy enemy : allEnemys){
      enemy.render(shapeRenderer);
  }
  shapeRenderer.set(ShapeRenderer.ShapeType.Line);
  shapeRenderer.setColor(0,0,0,255);
  shapeRenderer.end();

  batch.begin();
  player.render(batch);
  batch.end();

   world.step(1/45f,6,2);

我没有收到任何编译错误,也不知道哪里出了问题。

绘图调用时的GL状态完全不清楚,因此无法查明到底发生了什么。发布a。我不太明白我可以发布什么?我的渲染调用是通常的clear screen batch.beginn,然后是rendering和batch.render在End您没有两个不同的sprite批,是吗?我看到您将着色器应用于
testBatch
,但使用
batch
绘制。哦,不,是同一批。我只是将渲染方法复制在一起,因为我将其结构化为一个级别系统