09/03/08 17:22:04 5QzPfy2V
>>227
>レイヤのピクセルデータをDirect3Dのテクスチャで持っておいて、更新時にレンダーターゲットに合成とか
iTVPLayerManagerはそのための処理を抽象化した機構だぞっと
iTVPLayerManager 経由で吉里吉里側で把握してる更新領域分のビットマップだけを送り込んでくれるようになってる。
ただし、吉里吉里側の設計上、drawdevice におくりこんで制御できるのは、子レイヤの合成を全部把握してる
primaryLayer のみ
既存実装での Update() はそのレイヤマネージャの更新処理の口を全部たたいてるだけ。
iTVPDrawDevice::StartBitmapCompletion, NotifyBitmapCompleted, EndBitmapCompletion
が順次呼ばれてビットマップ情報の drawdevice 側への転送が行われるようになってる。
そのビットマップをどう保持するかは drawdevice の実装次第で、Direct3D ならテクスチャに
保持して、更新があった部分だけ lock してテクスチャを更新することになる。
そのテクスチャ化した吉里吉里レイヤの実際の描画処理は Show() で行う。
ソース眺めるなら、drawdeviceD3D とかも見るべし。複数の primaryLayer のビットマップ情報を
テクスチャ化して、拡縮した上で合成かけるサンプルになってる。もっとも単純に生成した順に重ねてるだけだが、
最背面:吉里吉里の primaryLayer その1
中間: 任意の D3D の描画
最前面:吉里吉里の primaryLayer その2
といった形への改造なら簡単に作れるだろう。
ただし、これは、吉里吉里本体が内包してる D3D7 のインターフェースを使ってる
から、自前で3D処理も作るなら今なら D3D9 で書き直したほうが良いとは思う。
実際の3Dエンジンとの複合例なら drawdeviceIrrlicht のサンプル実装もある。
Irrlicht 描画の内容を吉里吉里のレイヤに吸い込む処理ももってるから、
それはそれで参考になるだろう。それはやっぱり転送大量で重いけどね
FPS処理はその実装でおk