gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:37:57 26 4
gpt4 key购买 nike

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

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

在我的 renderGame() 函数中花费的平均时间:15-17 毫秒。

我使用 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. 我可以在 View 中使用不同的层或其他东西来提高性能吗?不知道那会如何工作,因为它最终都是像素。但是……
  3. 关于性能的任何其他提示?

最佳答案

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

为了提高性能,您的代码只需要接触矩形内的像素。否则矩形外的区域实际上被绘制了两次。

Canvas 渲染到 SurfaceView 表面永远不会硬件加速。您几乎肯定会通过使用 OpenGL ES 提高性能。您还需要学习 OpenGL ES,这并非易事。

如果你想要hardware-accelerated Canvas rendering ,您可以使用自定义 View 而不是 SurfaceView 表面。

更新:对于软件渲染来说,保持较低的更新像素数更为重要。考虑以较低的分辨率和放大进行渲染。参见 this articleGrafika 中的“硬件定标器练习器” .

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

关于android - 切换到 OpenGL 会提高渲染速度吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26208466/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com