1

iPhone OpenGL ES アプリを最適化しようとしています。これは、GLSprite および GLPaint サンプル アプリに基づいています。EAGLView を基本クラスに分解し、それを 3 つの異なる OpenGL ビューでサブクラス化して、3 つの透明なレイヤーを作成しています。3 つの EAGLView のディスプレイの親は UIView であり、その UIView は UIWindow の子です。これを60fpsにできるだけ近づけようとしています。iPhone は 60 fps で 50 の透明レイヤーを描画できるとこのサイトで他の人が言っているのを聞いたので、それは励みになります...

私がやっていることは次のとおりです。

1) GLPaint と同じポイント スプライト ベースの関数 (renderLineFromPoint:toPoint:) を使用して、最大 9 つのテクスチャ ラインをレイヤー #1 に描画します。これに使用されるテクスチャは 64x64 で、中央に 40x40 の円があり、残りは透明です。

2) レイヤー #2 に同じ機能とテクスチャを使用して単一の線を描画します。

3) 128x128 テクスチャの 9 つのインスタンス (80x80 中心の円で残りは透明) をレイヤー #3 に描画します。このレイヤーが一番上です。

レイヤー #1 と #3 はめったに変更されず、レイヤー #2 は touchesMoved: が呼び出されるたびに変更されます (全画面を消去し、1 行を再描画します)。

もともと、サンプルのように、単一の EAGLView でこれを実行しようとしました... 基本的に、3 つのレイヤーすべてのコンテンツを順番に描画します。しかし、これは遅すぎました。線画を追加する前(レイヤー1とレイヤー2)は良かったのですが、残念ながら1回のtouchedMovedごとに10本の線を描画すると、フレームレートが半分になりました。そこで、それらをレイヤーに分割して最適化しようとしました...必要な場合にのみ各レイヤーを1回描画します。(指の動きごとにレイヤー2を描画)。これはまだ十分に高速ではありません。透明度が高いためだと思います (各レイヤーが透けて見える必要があり、すべてのテクスチャ描画もブレンドする必要があります)。

私はたくさんの描画をしているとは思いません... 9 つの半透明の四角形と数本の線がたくさんありますか?

それで、私はここで運命づけられていますか?これほどの透過性を使用すると、パフォーマンスが低下しますか? または、私が見逃しているものがあります...どんな助けも大歓迎です!

4

1 に答える 1

1

レイヤー#1を削除してこれを修正しました。現在、レイヤー #2 は、静的線画と動的線画の両方を処理します。60fpsに戻った!:)

iPhoneが3つのフルスクリーン透明レイヤーを合成することに失敗したと思います...

于 2009-09-07T01:45:19.340 に答える