我有以下代码在运行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);
}
}
修改
我为相关的变量添加了精度,并且没有错误