2011-12-03 83 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);