使用着色器进行遮罩不能与OpenGL ES 2一起使用,但可以与OpenGL 2.0一起使用

时间:2014-04-03 09:21:34

标签: 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 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);
    }
}

修改

我为相关的变量添加了精度,并且没有错误

0 个答案:

没有答案