iOSでは、3つCGImage
のオブジェクトを作成できCADisplayLink
、60fpsで使用できました
self.view.layer.contents = (__bridge id) imageArray[counter++ % 3];
内でViewController
、毎回contents
、ビットマップであるビューの CALayer に画像が設定されます。
そして、これだけで、画面に表示される内容が変わる可能性があります。画面はこれら 3 つの画像を 60fps でループします。UIViewdrawRect
も、CALayerもdisplay
、drawInContext
CALayer のデリゲートもありませんdrawLayerInContext
。CALayer を変更するだけcontents
です。
また、小さいサイズのサブレイヤーを に追加して、代わりにself.view.layer
そのサブレイヤーを設定してみました。contents
そして、そのサブレイヤーはこれらの 3 つの画像を循環します。
つまり、これは昔の Apple ][ や King's Quest III 時代の DOS ビデオ ゲームでさえ、ビットマップが 1 つしかなく、常にビットマップが何であるかを画面に表示するのと非常によく似ています。
今回を除いて、それは 1 つのビットマップではなく、ビットマップのツリーまたはリンクされたリストであり、グラフィックス カードは常に Painter's Model を使用して、これらのビットマップを (位置と不透明度とともに) メイン画面に描画します。つまりdrawRect
、CALayer はすべて、この最終的な目的を達成するために設計されたようです。
それがどのように機能するのですか?グラフィックカードは、ビットマップの順序付きリストまたはビットマップのツリーを受け取りますか? (そして常にそれらを表示します。単純化するために、CA フレームワークの Implicit アニメーションは考慮しません) グラフィックス カード処理レイヤーで実際に何が起こっているのでしょうか? (実際、この方法は iOS、Mac OS X、PC でほぼ同じですか?)
(この質問は、グラフィック プログラミングが最新のグラフィック カードで実際にどのようにレンダリングされるかを理解することを目的としています。たとえば、UIView と CALayer の仕組みを理解する必要がある場合、または CALayer のビットマップを直接使用する場合でも、グラフィック アーキテクチャを理解する必要があるためです。)