Android OpenGL замедление после рисования спрайтов - PullRequest
0 голосов
/ 31 октября 2011

Извините за неописательный заголовок этого поста, но я просто не смог сформулировать его (пожалуйста, предложите лучший заголовок, если вы думаете об этом).

Часть моего текущего движка называет квадчтобы он отображался снова и снова для динамических источников света ... и, казалось, он работал нормально, но по какой-то странной причине после создания нескольких источников света, а затем уничтожения, игра остается такой же медленной, как если бы они все еще рисовались ...Мне интересно, оставляет ли моя функция 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".

Любая помощь будет отличной ...

1 Ответ

0 голосов
/ 01 апреля 2012

Вы проверяли, что не делаете слишком много объектов?

У меня была проблема, когда она становилась все медленнее, оказалось, что я не очищал свой список "addToScene". Это означает, что каждый кадр, в который я добавлял другой набор всех сущностей в моей игре.

Если вы делаете это со спрайтами, вы не заметите замедления, если закомментируете то, что требует времени - то есть чертеж.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...