5

タッチを使用して画面に描画できるプロジェクトに取り組んでいます。OpenGLを使用することを考えましたが、2つの例に出くわしました。1 つは OpenGL を使用し、もう 1 つは Quartz2D を使用します。

Apple のサンプル プロジェクト、GLPaint、OpenGL を使用

Quartz2Dを使用したEffectiveUIのサンプルプロジェクト

私が驚くのは、Quartz の実装が OpenGL の実装よりもかなり高速であることです。OpenGL は低レベルであるため、ハードウェア自体とほぼ通信できるため、OpenGL の方が高速であると常に想定していました。Quartz2D も描画に OpenGL を使用していることを知っているので、私の質問は次のとおりです。GLPaint の例での描画が遅いのはなぜですか?

GLPaint プロジェクトを最適化して、パフォーマンスを向上させることはできますか?

4

2 に答える 2

6

シミュレータでは、OpenGLESはハードウェアアクセラレーションされていないため(異なるチップセット、ARMとi386)、Quartz2DはOpenGLESよりも約5倍高速になる可能性があることはよく知られています。

デバイスでOpenGLESを使用してテストし、それをQuartz 2Dと比較することを強くお勧めします。そうすれば、OpenGLESのパフォーマンスが約2倍向上するはずです。

OpenGLを使用するときに考慮すべきもう1つのことは、画像操作です。OpenGLはそのために作成されたものではないため、画像バッファーは1つしかありません。つまり、実際にGPUに一度に含めることができる画像は1つだけです。これを補うために、TexturePackerなどのプログラムを使用してテクスチャアトラスを(PVRTCとして)OpenGLにロードしてみてください。そうすれば、パフォーマンスが大幅に向上するはずです。

上記を考慮に入れて、GLPaintは実際にはその実装で線を描画しているのではなく、フレームバッファ上に半透明のPNGを描画し、それに応じて色を付けようとしていることを忘れないでください。これは非常にコストがかかるため、リンゴとリンゴを比較することをお勧めします(OpenGL線画とQuartz線画)

それに直面しましょう-OpenGLは古いので、そのまま扱わなければなりません-老犬。この老犬に新しいトリックを教えることはできませんが、それが知っているトリックはとても得意です。

一方、クォーツは新しい犬です-それは多くのトリックを行うことができますが、1つのことを特にうまく行うことはできません-それらを実行します。適度に複雑なプロジェクトの場合は問題ありませんが、主要なプロジェクトの場合は、常にOpenGLまたは薄いC++ラッパーをお勧めします。

于 2012-08-30T12:31:56.137 に答える
1

OpenGL は、間違いなく Quartz ができるレベルを超えるレベルに到達できますが、非常に低いレベルであるため、そのレベルに到達するには専門家が必要になることがよくあります。Quartz はすでに専門家によって作成されており、その制限内で生活できる限り、描画アプリにとって完璧な API になるはずです。

私自身の経験では、パフォーマンスのために OpenGL を利用する必要がほとんどなかったため、Quartz を使用して UIKit をカスタマイズすることがよくありました。私がカスタム OpenGL 実装を構築するとき、それは通常、Quartz が必要のない複雑なアニメーションを実行できないためです。単純なものではパフォーマンスがよくないからです。

于 2012-08-30T12:28:20.003 に答える