2011-12-03 74 views
3
Gdx.gl10.glPushMatrix(); 
Gdx.gl10.glTranslatef(center.x, center.y, 0); 
Gdx.gl10.glRotatef(0, 0, 1, angle * 360f/(2f * (float)Math.PI)); 
texture.bind(); 
mesh.render(GL10.GL_TRIANGLE_STRIP); 
Gdx.gl10.glPopMatrix(); 

...这里是一些代码,绘制一些文字:如何避免libgdx SpriteBatch/BitmapFont破坏Texture.bind?

spriteBatch.begin(); 
spriteBatch.setColor(1, 1, 1, 1); 
float fps = 1f/Gdx.graphics.getDeltaTime(); 
font.draw(spriteBatch, "fps: " + fps, 0, 50); 
spriteBatch.end(); 

代码的第一位的工作,帧帧后,直到第二个代码位运行。之后,第一个位的三角形条仅使用最新的glMaterial进行渲染。任何想法为什么发生这种情况?我应该怎么做才能将两种材质保留在绘图中(网格纹理和纹理纹理应该不同)?

+0

我删除了你的一些标签,因为他们似乎没有强烈地涉及到你的问题。随意编辑一些你认为描述的问题。 – Pubby

回答

4

SpriteBatch#end()必须禁用混合和纹理,因为它在调用SpriteBatch#begin()时假定一个干净的GL状态上下文,并在SpriteBatch#end()上恢复该清理状态上下文。在你的情况下,你只需在渲染网格之前通过glEnable(GL10.GL_TEXTURE_2D)启用纹理。

如果有疑问,请查看SpriteBatch javadocs,它告诉您关于GL状态更改的信息。

1

我遇到了同样的问题,我的解决办法是设置活动纹理回GL_TEXTURE0让SpriteBatch之前(或在我的情况scene2d)做它的东西:

Gdx.gl20.glActiveTexture(GL20.GL_TEXTURE0);