« VMRでのBMPコピー先矩形の指定 | メイン | VMRの他の機能 »

2005年09月27日

吉里吉里 ムービー拡張日誌2:: メッセージレイヤーとのミキシング

    

VideoOverlay::setMixingLayer( Layer l )で指定されたレイヤーとミキシングするようにした。
ただし、setMixingLayerはレイヤー画像が更新されるたびにコールする必要がある。

ブレンド値は、Layer::opacityを使い
転送先矩形は、
dest.left = Layer::left + Layer::imageLeft;
dest.top = Layer::top + Layer::imageTop;
dest.right = dest.lerf + Layer::imageWidth;
dest.bottom = dest.top + Layer::imageHeight;
とした。

ミキシングするには、画像のHDCを指定する必要がある。
レイヤーが持っているBitmapのHDCを取得するためには次のようにすれば良いようだ。
tTJSNI_BaseLayer::GetMainImage()->GetBitmap()->GetBitmapDC()
でも、デフォルトではDIBSectionは使わないようになっており、実行時の引数に"-dibtype=dibsect"を指定してやればDIBSectionが使われるようになる。

"-dibtype=dibsect"を指定して実行し、kag.movies[0].setMixingLayer( kag.current );とすれば、メッセージレイヤーとブレンドして表示されるようになった。
負荷は、GeForce 6600 GTだとかなり少ない。
他はまだ試していない。

後は次の2つを組み込んでやれば、VMRモードを公開できるレベルになる。
1. DIBSectionでない時は、DCを作ってそこへコピーしてやる。
2. 対象レイヤーが更新される時、ムービーが再生中でかつvomMixingモードの時はsetMixingLayerをコールするようにする。
でも、1はいいとして、2はどうしよう?
KAGの方でLayer::onPaintをオーバーライドしてやればいいかな。
そしたら、自分が設定されているかどうかも知る必要があるか。
KAGのMovieでsetMixingLayerをオーバーライドして覚えるようにしておくか。
なんとかなりそうだな。



投稿者 Takenori : 2005年09月27日 02:54




comments powered by Disqus
Total : Today : Yesterday : なかのひと