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

... et voici un code qui attire un peu de texte:Comment puis-je éviter libgdx SpriteBatch/BitmapFont briser 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(); 

Le premier bit de code fonctionne, image après image, jusqu'à ce que le second bit exécute le code. Après cela, la bande triangulaire du premier bit est rendue en utilisant uniquement le dernier glMaterial. Une idée de pourquoi cela se passe? Que dois-je faire pour garder les deux matériaux dans le dessin («texture» pour le maillage et sa texture sprite, cela devrait être différent)?

+0

J'ai enlevé certains de vos étiquettes qu'ils n'a pas semblé se rapporter fortement à votre question. N'hésitez pas à en éditer quelques-unes en ce sens que vous pensez décrire le problème. – Pubby

Répondre

4

SpriteBatch#end() a pour désactiver le mélange et la texturation car elle suppose un contexte d'état de GL propre à un appel à SpriteBatch#begin() et restaure ce contexte d'état propre à SpriteBatch#end(). Dans votre cas, vous devez simplement activer la texturation via glEnable(GL10.GL_TEXTURE_2D) avant de rendre votre maillage. En cas de doute, jetez un coup d'œil aux javadocs SpriteBatch qui vous informent des changements d'état du GL.

1

je suis tombé sur le même problème et ma solution était de définir la texture actif vers GL_TEXTURE0 avant de laisser SpriteBatch (ou dans mon scene2d cas) faire son truc:

Gdx.gl20.glActiveTexture(GL20.GL_TEXTURE0);