Java 使用着色器的遮罩不';不能使用OpenGL ES 2,但可以使用OpenGL 2.0
我有以下代码,在运行OpenGL 2.0的libgdx桌面端口中运行良好 但它不适用于运行OpenGL ES 2的libgdx android端口。 知道为什么吗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
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的品牌/型号。