Java 使用着色器的遮罩不';不能使用OpenGL ES 2,但可以使用OpenGL 2.0

Java 使用着色器的遮罩不';不能使用OpenGL ES 2,但可以使用OpenGL 2.0,java,android,opengl-es,libgdx,Java,Android,Opengl Es,Libgdx,我有以下代码,在运行OpenGL 2.0的libgdx桌面端口中运行良好 但它不适用于运行OpenGL ES 2的libgdx android端口。 知道为什么吗 import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import c

我有以下代码,在运行OpenGL 2.0的libgdx桌面端口中运行良好 但它不适用于运行OpenGL ES 2的libgdx android端口。 知道为什么吗

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.glutils.ShaderProgram;
import com.badlogic.gdx.scenes.scene2d.Actor;

public class MaskImage extends Actor
{
    ShaderProgram program;
    Texture texture0;
    Texture mask;

    final String vertexShader = 
        "uniform mat4 u_projView;\n" + 
        "attribute vec4 " + ShaderProgram.POSITION_ATTRIBUTE + ";\n" + 
        "attribute vec2 " + ShaderProgram.TEXCOORD_ATTRIBUTE + ";\n"   + 
        "attribute vec4 " + ShaderProgram.COLOR_ATTRIBUTE + ";\n" + 
        "uniform sampler2D u_mask;\n" + 
        "varying vec4 vColor;\n" + 
        "varying vec2 vTexCoord;\n" + 
        "void main(){\n" + 
        "   vColor = " + ShaderProgram.COLOR_ATTRIBUTE + ";\n" + 
        "   vTexCoord = " + ShaderProgram.TEXCOORD_ATTRIBUTE + ";\n" + 
        "   gl_Position =  u_projView * " + ShaderProgram.POSITION_ATTRIBUTE + ";\n"
        + "}\n";

final String fragmentShader = 

     "varying lowp vec4 vColor;\n" +
     "uniform sampler2D u_mask;\n" +
     "varying lowp vec2 vTexCoord;\n" +
     "uniform sampler2D u_texture;\n" +
     "void main(void)\n" +
     "{\n" +
     "    highp float mask;\n"+
     "    lowp vec4 texColor = texture2D(u_texture, vTexCoord);\n" +
     "    mask = texture2D(u_mask, vTexCoord).a;\n" +
     "    gl_FragColor = vColor * texColor * mask;\n" +
     "}\n";

    public MaskImage()
    {
    texture0 = new Texture(Gdx.files.internal("data/grass.png"));
    mask = new Texture(Gdx.files.internal("data/msk.png"));

    program = new ShaderProgram(vertexShader, fragmentShader);

    Gdx.graphics.getGL20().glActiveTexture(GL20.GL_TEXTURE1);
    mask.bind();

    Gdx.graphics.getGL20().glActiveTexture(GL20.GL_TEXTURE0);
    texture0.bind();
    }

    @Override
    public void draw(SpriteBatch batch, float parentAlpha)
    {
    program.begin();
    program.setUniformi("u_mask", 1);
    batch.draw(texture0, 200, 200);
    }
}
编辑:


我向相关变量添加了精度,并将其视为无错误

获取着色器的日志(
Gdx.app.log(“着色器”,program.getLog()
)。与GL/vs GL ES一样,GPU的着色器编译器也可能存在此问题。谢谢。我现在有一些错误,它们都已修复,但仍然无法与OpenGL ES 2一起使用。是否可以包含一些屏幕截图来演示正在发生的情况?另外,请包含GPU的品牌/型号。