强制SpriteBatch切换纹理

时间:2014-06-26 17:17:12

标签: libgdx

我有一个问题,我认为是因为缺少纹理切换。这是我在伪代码中的渲染方法

spriteBatch.begin();
render stuff
spriteBatch.end();

setup shader with different texture
render some Meshes

spriteBatch.begin();
render stuff
spriteBatch.end();

这会导致非常奇怪的结果。我想问题是,SpriteBatch最初设置了一个纹理,然后着色器改变了纹理,当SpriteBatch启动下一个batch.begin()时,它不会简单地调用switchTexture()因为它不知道纹理在平均时间内发生了变化。

我该怎么做才能解决这个问题?有没有办法保存当前纹理,渲染网格并恢复以前的纹理?据我所见,没有办法告诉SpriteBatch它应该调用switchTexture()

1 个答案:

答案 0 :(得分:1)

SpriteBatch不会自动切换回纹理单元0,因此如果您最近切换到某个其他纹理单元以绑定网格的多个纹理,则必须手动切换回它。

如果你一直在使用多纹理的东西,请在Gdx.gl.glActiveTexture(GL20.GL_TEXTURE0);之前致电spriteBatch.begin()

SpriteBatch不会保留对begin() / end()块之外的任何纹理的引用,但如果您将活动纹理保留为GL_TEXTURE0之外的其他纹理,那么当SpriteBatch转到绑定时你正在批处理的精灵的纹理,它将它绑定到错误的纹理单元,所以它将从你最近的一个网格中的GL_TEXTURE0中绘制精灵。