2011-09-07 113 views
3

我正在使用libgdx爲Android編寫遊戲。下面是一些繪製質感的圓環代碼:爲什麼libgdx SpriteBatch/BitmapFont會破壞Texture.bind?

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(); 

...這裏是一些繪製一些文字代碼:

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

代碼的第一位的工作,一幀一幀後,直到第二位代碼運行。之後,第一個位的三角形條僅使用最新的glMaterial進行渲染。任何想法爲什麼發生這種情況?

更新:已解決!原來SpriteBatch.end()調用glDisable(GL_TEXTURE_2D)。只需要讀取源代碼...

+0

我有完全相同的問題。但不知爲什麼,你的問題沒有得到回答。你的解決方案是什麼?你在渲染文本之前是否放棄了其他紋理,或者你做了什麼? – nerdinand

回答

5

它實際上在Javadocs中也是如此。經驗法則:連接到OpenGL ES的所有libgdx類將改變狀態的最小數量,並且很可能不會重置事件,因爲查詢狀態的代價很高。

+0

同樣的問題給你:我有完全相同的問題。但不知爲什麼,這個問題沒有得到回答。這有什麼解決辦法? 我在我的遊戲中有多個屏幕,並從我的遊戲屏幕(使用ShaderPrograms渲染)切換到PauseScreen或GameOverScreen(使用scene2d渲染),屏幕使用遊戲中的紋理而不是BitmapFont進行渲染。 – nerdinand

2

我遇到了同樣的問題,我的解決辦法是設置活動紋理回GL_TEXTURE0讓SpriteBatch之前(或在我的情況scene2d)做它的東西:

Gdx.gl20.glActiveTexture(GL20.GL_TEXTURE0); 
相關問題