我有一个问题,我认为是因为缺少纹理切换。这是我在伪代码中的渲染方法
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()
。
答案 0 :(得分:1)
SpriteBatch不会自动切换回纹理单元0,因此如果您最近切换到某个其他纹理单元以绑定网格的多个纹理,则必须手动切换回它。
如果你一直在使用多纹理的东西,请在Gdx.gl.glActiveTexture(GL20.GL_TEXTURE0);
之前致电spriteBatch.begin()
。
SpriteBatch不会保留对begin()
/ end()
块之外的任何纹理的引用,但如果您将活动纹理保留为GL_TEXTURE0之外的其他纹理,那么当SpriteBatch转到绑定时你正在批处理的精灵的纹理,它将它绑定到错误的纹理单元,所以它将从你最近的一个网格中的GL_TEXTURE0中绘制精灵。