質問

libgdxを使用してAndroidのゲームを書いています。テクスチャのあるトーラスを描くコードを次に示します。

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

コードの最初のビットは、2番目のコードが実行されるまで、フレームの後のフレームで機能します。その後、最初のビットの三角形ストリップは、最新のglmaterialのみを使用してレンダリングされます。なぜこれが起こっているのかという考えはありますか?

更新:解決しました! spritebatch.end()はgldisable(gl_texture_2d)を呼び出します。ソースを読まなければなりませんでした...

役に立ちましたか?

解決

Javadocsでも実際にそう言っています。経験則:OpenGL ESに接続されているすべてのLIBGDXクラスは、状態の最小量を変更し、状態のGLをクエリするのにコストがかかるため、物事をリセットしない可能性が高いです。

他のヒント

私は同じ問題に遭遇しましたが、私の解決策は、SpriteBatch(または私の場合のScene2D)にそのことをする前に、アクティブなテクスチャをGL_Texture0に戻すことでした。

Gdx.gl20.glActiveTexture(GL20.GL_TEXTURE0);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top