简体   繁体   中英

How can I avoid libgdx SpriteBatch/BitmapFont breaking 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();

...and here is some code that draws a bit of text:

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

The first bit of code works, frame after frame, until the second bit of code runs. After that, the first bit's triangle strip is rendered using only the latest glMaterial. Any idea why this is happening? What should I do to keep both materials in drawing ('texture' for mesh and its sprite texture, that should be different)?

SpriteBatch#end() has to disable blending and texturing as it assumes a clean GL state context on a call to SpriteBatch#begin() and restores that clean state context on SpriteBatch#end() . In your case, you simply have to enable texturing via glEnable(GL10.GL_TEXTURE_2D) before you render your mesh.

When in doubt check out the SpriteBatch javadocs which tell you about the GL state changes it makes.

我遇到了同样的问题,我的解决方案是将活动纹理设置回GL_TEXTURE0,然后让SpriteBatch(或者在我的情况下为scene2d)做它的东西:

Gdx.gl20.glActiveTexture(GL20.GL_TEXTURE0);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM