用于水的LibGdx ShaderProgram打破了我的图形代码

时间:2016-06-02 17:13:22

标签: java opengl libgdx 2d shader

我在libGDX中制作2D游戏。 它运行良好,看起来像那样:Before Shader water

现在我正在寻找一些水上渲染器,我发现了一些令人惊奇的东西:tutorial,它运行良好。 但是,当我按顺序渲染我的游戏然后“水效果”时,抽水的行为就像这样打破我的图像:After Shader wate 所有的块都改变了其他的,令人毛骨悚然的动画。而且我无法弄清楚问题是什么。

我用spriteBatch.draw(...)渲染我的所有游戏;对于水:

`//RENDER WATER 
 Gdx.gl20.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);        
 Gdx.gl20.glEnable(GL20.GL_BLEND); 
 texture2.bind(1); // traitement that break the code
 texture3.bind(2); 
 shader.begin(); 
 shader.setUniformMatrix("u_worldView", matrix); 
 shader.setUniformi("u_texture", 1); 
 shader.setUniformi("u_texture2", 2); 
 shader.setUniformf("timedelta", -angle); 
 waterMesh.render(shader, GL20.GL_TRIANGLE_FAN); 
 shader.end();`

事实上,我想知道如何告诉LibGdx简单地应用"水效果"最后,但不会影响屏幕上已有的内容。

Thx!

1 个答案:

答案 0 :(得分:3)

SpriteBatch假设GL状态保留为默认值,在这种情况下,当你绑定多个纹理时,你不会将活动纹理单元保留为0,因此SpriteBatch没有为你的精灵使用正确的纹理

Gdx.gl.glActiveTexture(GL20.GL_TEXTURE0);之前调用spriteBatch.begin()来解决此问题。