LibGDX SpriteBatch Multitexture可能吗?

时间:2012-08-15 22:53:43

标签: android opengl-es-2.0 libgdx multitexturing spritebatch

我很高兴使用LibGDX Framework的SpriteBatch类。 我的目标是通过着色器修改精灵的表示。

batch = new SpriteBatch(2, shaderProgram);

我从SpriteBatch类复制了默认着色器并添加了另一个 均匀采样器2d

+ "uniform sampler2D u_Texture2;\n"//

是否有一种工作方式将纹理赋予着色器。 这样做,总是在ClearColor屏幕中结束。

batch.begin();
  texture2.bind(1);
  shaderProgram.setUniformi("u_Texture2", 1);
  batch.draw(spriteTexture,positions[0].x,positions[0].y);
  batch.draw(spriteTexture,positions[1].x,positions[1].y);
batch.end();

每个纹理都在起作用。在Mesh类的帮助下手动绘制按预期工作。那么我该如何使用SpriteBatch的便利性呢?

THX寻求帮助

1 个答案:

答案 0 :(得分:7)

我猜那里的问题与纹理绑定有关。 SpriteBatch假设活动纹理单元为0,因此它调用

lastTexture.bind();代替lastTexture.bind(0);

问题是你给它的主动单元是1(你在代码中调用texture2.bind(1);)。因此,纹理单元0永远不会被绑定,并且可能会导致空白屏幕。

例如,我会在Gdx.GL20.glActiveTexture(0);来电之前添加draw。我不太确定它会解决问题,但这是一个开始!

修改   我尝试了我建议的解决方案,它的确有效:d。为了更清楚,你应该这样做:

      batch.begin();
      texture2.bind(1); 
      shaderProgram.setUniformi("u_Texture2", 1);
      Gdx.gl.glActiveTexture(GL10.GL_TEXTURE0);//This is required by the SpriteBatch!!
             //have the unit0 activated, so when it calls bind(), it has the desired effect.
      batch.draw(spriteTexture,positions[0].x,positions[0].y);
      batch.draw(spriteTexture,positions[1].x,positions[1].y);
    batch.end();