この記事の非記述的なタイトルは申し訳ありませんが、私はフレーズを書くことができませんでした。スプライトが描かれた後のアンドロイドのOpenGLの減速
私の現在のエンジンの一部は、ダイナミックなライトのために何度もレンダリングされるクワッドを呼びます...それは正常に動作していたようですが、いくつかのライトが作成された後にいくつかの奇妙な理由で私がdrawSprite関数がメモリ内に何かを残しているのだろうかと疑問に思っています...
これを呼び出す関数のスリムなバージョンがあります:
public void lightBlock(GL10 gl, int _x, int _y, float shade)
{
if (map[_x][_y].Type()==1)
{
gl.glPushMatrix();
gl.glTranslatef(_x*2,getFH(_x,_y)+.01f,_y*2);
gl.glRotatef(90,1, 0, 0);
gl.glScalef(2, 2, 0);
gl.glColor4f(shade,shade,shade, 1f);
drawSprite(gl,0);
gl.glPopMatrix();
gl.glPushMatrix();
gl.glTranslatef(_x*2,getRH(_x,_y)-.01f,_y*2);
gl.glRotatef(-90,1, 0, 0);
gl.glScalef(2, 2, 0);
gl.glColor4f(shade,shade,shade, 1f);
//Draw the vertices
drawSprite(gl,0);
gl.glPopMatrix();
}
}
public void drawSprite(GL10 gl, int tex)
{
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glBindTexture(GL10.GL_TEXTURE_2D, tex);
//defines the vertices we want to draw
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, SvertexBuffer);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, StexBuffer);
//Draw the vertices
gl.glDrawElements(GL10.GL_TRIANGLES, 6, GL10.GL_UNSIGNED_SHORT, SindexBuffer);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
}
ライトが使用されていない場合、これらの機能は呼び出されませんが、多くの場合、何度も実行していたらゲームは遅くなります...そして、drawSprite()コールをコメントアウトすると正常に実行されます...
ライトが内側"onDrawFrame"関数。