Почему libgdx SpriteBatch / BitmapFont разбивает Texture.bind?

Я пишу игру для Android с помощью libgdx. Вот некоторый код, который рисует текстурированный тор:

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). Просто нужно было прочитать источник …

На самом деле это говорит и в Javadocs. Правило большого пальца: все классы libgdx, связанные с OpenGL ES, изменят минимальное количество состояний и, скорее всего, не будут перезагружать вещи, поскольку запрос GL для состояния является дорогостоящим.

Я столкнулся с той же проблемой, и моим решением было установить активную текстуру обратно в GL_TEXTURE0, прежде чем позволить SpriteBatch (или в моем случае scene2d) сделать свой материал:

 Gdx.gl20.glActiveTexture(GL20.GL_TEXTURE0); 
Intereting Posts