切换到OpenGL会提高渲染速度吗?

时间:2014-10-05 23:58:01

标签: android opengl-es surfaceview

我为自己的游戏做了一些简单的基准测试。

事实证明我在updateGame()函数中花费的平均时间是:1-4毫秒

我的renderGame()函数花费的平均时间:15-17ms。

我使用SurfaceView和脏矩形。然而,脏矩形的大小似乎并没有影响奇怪的性能。

无论如何,renderGame()函数是这里的瓶颈,让我无法达到我需要的45-60 FPS。 我也使用三星S4 Mini,所以它是一款相当强大的手机,所以底端手机会更糟糕。

我的渲染功能如下所示:

@Override
public void render( double interpolation, Canvas canvas )
{
    canvas.drawColor( Color.TRANSPARENT, PorterDuff.Mode.CLEAR );

    canvas.drawBitmap( background, null, backgroundRect, null );

    for ( int i = 0; i < theGameEdges.length; i++ )
    {
        theGameEdges[ i ].draw( canvas );
    }

    for ( int i = 0; i < obstacles.length; i++ )
    {
        obstacles[ i ].draw( canvas );
    }

    for ( int i = 0; i < holes.length; i++ )
    {
        holes[ i ].draw( canvas );
    }

    for ( int i = 0; i < goalFlags.length; i++ )
    {
        goalFlags[ i ].draw( canvas );
    }

    balls = level.getBallPositions();
    for ( int i = 0; i < balls.length; i++ )
    {
        SilverBallRect[ i ].set(
                balls[ i ].X + theOffsetX,
                balls[ i ].Y + theOffsetTopY,
                balls[ i ].X + ballSize + theOffsetX,
                balls[ i ].Y + ballSize + theOffsetTopY
        );

        canvas.drawBitmap( SilverBall, null, SilverBallRect[ i ], null );
    }

    stringBuilder.setLength( 0 );
    stringBuilder.append( timeString ).append( engine.getTimeSeconds() );

    canvas.drawText( stringBuilder, 0, stringBuilder.length(), textX, textY, theTextPaint );
}
  1. 我可以使用OpenGL来提高性能吗?
  2. 我可以在视图中使用不同的图层,还是可以提高性能?不知道这是怎么回事,因为它最终都是像素。但是...
  3. 有关性能的其他提示吗?

1 个答案:

答案 0 :(得分:1)

脏脏矩形的大小影响更新的屏幕部分,而不是渲染的部分 - 它不是剪辑矩形。如果在脏矩形之外绘制像素,它们将被绘制,但在将前一帧复制到外部区域时不会被覆盖。

为了提高性能,您的代码只需要触摸rect内的像素。否则,矩形之外的区域将被有效地绘制两次。

对SurfaceView表面的画布渲染永远不会硬件加速。几乎可以肯定,使用OpenGL ES可以提高性能。您还需要学习OpenGL ES,这不是一件容易的事。

如果您需要hardware-accelerated Canvas rendering,则可以使用自定义视图而不是SurfaceView曲面。

更新:对于软件渲染来说,保持更新的像素数较低非常重要。考虑以较低的分辨率和升级进行渲染。请参阅this article和&#34;硬件缩放器练习器&#34;在Grafika

有关Android图形架构的更多详细信息,请参阅this document