Android-OpenGL ES 1.1的高fps下载

Android-OpenGL ES 1.1的高fps下载,android,opengl-es,Android,Opengl Es,我想做一个简单的2D游戏。我注意到,使用vsync以60 FPS的速度调用onDrawFrame()函数。但是,由于某些原因,在旧设备上,如果渲染时间超过1ms,则每隔几帧就会跳过一帧,动画看起来一点也不平滑。我说的是不太旧的设备 90%的图形代码如下所示: gl.glBindTexture(GL11.GL_TEXTURE_2D, MainProgram.glSurfaceView.renderer.ResourceIdToTexture(R.drawable.tank));

我想做一个简单的2D游戏。我注意到,使用vsync以60 FPS的速度调用onDrawFrame()函数。但是,由于某些原因,在旧设备上,如果渲染时间超过1ms,则每隔几帧就会跳过一帧,动画看起来一点也不平滑。我说的是不太旧的设备

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实现这一点?

如何测量获得1ms的时间?很可能这个计时完全与CPU有关,GPU渲染帧所需的时间要高得多。我使用System.nanoTime()来测量从drawFrame()开始到结束所花费的时间。我还添加了一个计数器,该计数器每秒将自身置零,以测量GLThread调用此函数的频率。也许GL调用并没有立即起作用,还有更多的问题。这不是一种有效的测量渲染时间的方法。在VSYNC的应用程序中,交换缓冲区的操作会刷新命令缓冲区(例如,执行所有渲染),然后阻止调用线程,直到新的VBLANK间隔开始,在该间隔处交换后/前缓冲区。如果您确实想更准确地了解性能,请尝试手动刷新并测量完成后的时间,然后交换缓冲区。它仍然不如在纯OpenGL中使用计时器查询准确,但它比您现在尝试的要好。好的,那么一般问题呢?在用上述代码绘制10张左右的位图并将fps除以2的情况下,今天的游戏需要多少时间才能绘制出绝对平滑的位图?如何使渲染速度达到如此之快?