2011-10-31 2 views
0

이 게시물에 대한 설명이 아닌 제목을 사용하여 죄송합니다.하지만 필자는이 단어를 구사하지 못했습니다.스프라이트가 그려진 후 android opengl slowdown

내 현재 엔진의 일부가 동적 조명을 위해 반복해서 렌더링되는 쿼드를 호출합니다 ... 그리고 제대로 작동하는 것처럼 보였습니다. 그러나 몇 가지 조명이 만들어진 후 이상한 이유로 인해 게임이 파괴 된 상태로 남아 있습니다. 그들은 여전히 ​​그려지는 것처럼 느려지는 것처럼 ... 내 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"목록을 지우지 못했습니다. 이것은 모든 프레임이 내 게임에서 모든 엔티티 집합을 추가한다는 것을 의미합니다.

스프라이트를 사용하여 작업하는 경우 시간이 걸리는 것을 주석으로 처리하면 속도 저하를 알 수 없습니다 (예 : 그리기).