0

我正在尝试制作一个简单的 2D 游戏。我注意到 onDrawFrame() 函数是在 60 FPS 中使用 vsync 调用的。但是,由于某些原因,在较旧的设备上,如果渲染时间超过 1 毫秒,那么它将每隔几帧跳过一帧,并且动画看起来一点也不流畅。我说的是不太旧的设备......

90% 的绘图代码如下所示:

        gl.glBindTexture(GL11.GL_TEXTURE_2D, MainProgram.glSurfaceView.renderer.ResourceIdToTexture(R.drawable.tank));
        gl.glFrontFace(GL11.GL_CW);
        gl.glVertexPointer(3, GL11.GL_FLOAT, 0, vertexBuffer);
        gl.glTexCoordPointer(2, GL11.GL_FLOAT, 0, tankTextureBuffer);
        float[] glCoords = World.WorldCoordsToGLCoords(tank.GetPosition().PosX(), tank.GetPosition().PosY());
        float[] glDims = {0.025f, 0.025f};
        gl.glPushMatrix(); 
        gl.glTranslatef(glCoords[0], glCoords[1]+glDims[1], -1.0f);
        gl.glScalef(glDims[0], glDims[1], 1.0f);
        float[] tc = tank.GetOwner().GetColor().asFloatArray();
        gl.glColor4f(tc[0],tc[1],tc[2],tc[3]);
        gl.glDrawArrays(GL11.GL_TRIANGLE_STRIP, 0, vertex.length / 3);
        gl.glColor4f(1f, 1f, 1f, 1f);
        gl.glPopMatrix();

尽管如此,将所有绘图处理到屏幕上仍需要 1 毫秒,我注意到 FPS(我测量了每秒调用 surfaceView.drawFrame 的计时器数)从 60 下降到 30 左右,看起来几乎令人作呕. 即使在最古老的设备上,其他游戏如何也有如此流畅的动画?我如何使用 GLES11 实现这一目标?

4

0 回答 0