2011-10-31 5 views
0

この記事の非記述的なタイトルは申し訳ありませんが、私はフレーズを書くことができませんでした。スプライトが描かれた後のアンドロイドの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"関数。

答えて

0

すべてのヘルプは素晴らしいことだが...あなたがオブジェクトのあまりに多くを作っていませんがチェックしましたか?

私はそれが次第に遅くなっている問題を抱えていました。私は "addToScene"リストをクリアしていませんでした。これはすべてのフレームを意味し、私はゲーム内のすべてのエンティティのセットを別のものに追加していました。

スプライトを使用している場合、時間がかかるもの、つまり図面をコメントアウトすると、スローダウンに気付かないでしょう。

関連する問題