绘制精灵后,android opengl减速

时间:2011-10-31 11:27:50

标签: android opengl-es

对于这篇文章的非描述性标题感到抱歉,但我无法用它来表达它(如果你想到的话,请建议一个更好的标题)。

我当前引擎的一部分调用一个四边形来反复渲染动态灯......它似乎工作正常,但是由于一些奇怪的原因,在创建了几个灯后然后摧毁了游戏仍然很慢因为它们仍然被绘制...我想知道我的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 :(得分:0)

你检查过你没有制作过多的物品吗?

我有一个问题,它逐渐变慢,结果我没有清除我的“addToScene”列表。这意味着我在游戏中添加了所有实体的每一帧。

如果你是用精灵做的那样,如果你注释掉需要时间的东西 - 即绘图,你就不会注意到减速。