Platform SDK: DirectX

ステップ 4.3 : オーバーレイ サーフェスの表示

[Visual Basic]

ここでは、C および C++ でのアプリケーション開発について説明する。Visual Basic については、「DirectDraw Visual Basic チュートリアル」を参照すること。

[C++]

転送元および転送先の矩形をセットアップした後に、初めてオーバーレイを表示することができる。正しく準備できていれば、簡単なことである。Mosquito サンプルでは次のコードを使い、最初にオーバーレイを表示する。

// UpdateOverlay に送るフラグを設定する。
    dwUpdateFlags = DDOVER_SHOW | DDOVER_DDFX;
 
// オーバーレイ ハードウェアが転送先カラー キーイングをサポートするか ?
// サポートする場合、イメージの周りの黒いバックグラウンドを隠蔽できる。
// おそらく、YUV フォーマットでは作用できない。
    if (capsDrv.dwCKeyCaps & DDCKEYCAPS_SRCOVERLAY)
        dwUpdateFlags |= DDOVER_KEYSRCOVERRIDE;
 
// 転送元カラー キーを指定するためのオーバーレイ FX 構造体を
// 作成する。DDOVER_SRCKEYOVERRIDE フラグが設定されていない場合、
// この情報は無視される。
    ZeroMemory(&ovfx, sizeof(ovfx));
    ovfx.dwSize = sizeof(ovfx);
 
// 黒をカラー キーとして指定する。
    ovfx.dckSrcColorkey.dwColorSpaceLowValue=0; 
    ovfx.dckSrcColorkey.dwColorSpaceHighValue=0;
 
// UpdateOverlay() を呼び出し、スクリーンにオーバーレイを表示する。
// screen.
    ddrval = g_lpddsOverlay->UpdateOverlay(&rs, g_lpddsPrimary, &rd, dwUpdateFlags, &ovfx);
    if(FAILED(ddrval))
        return FALSE;
 

上記の例では、一時変数 dwUpdateFlags に DDOVER_SHOW および DDOVER_DDFX フラグを設定することで始まる。これらのフラグは、オーバーレイの初回の表示、およびそのために関連する DDOVERLAYFX 構造体のエフェクト情報を使用すべきハードウェアを示している。次に、既存の DDCAPS 構造体を調べて、オーバーレイ転送元カラー キーイングがサポートされているかを判断する。サポートされている場合、転送元カラー キーイングを利用するために dwUpdateFlags 変数に DDOVER_KEYSRCOVERRIDE を含め、それに応じてカラー キー値を設定する。

準備が完了すると、IDirectDrawSurface7::UpdateOverlay メソッドを呼び出してオーバーレイを表示する。この呼び出しでは、最初と 3 番目のパラメータが調整された転送元および転送先矩形のアドレスとなる。2 番目のパラメータは、表示されるオーバーレイのプライマリ サーフェスのアドレスとなる。4 番目のパラメータは、前に準備した dwUpdateFlags 変数に設定したフラグとなる。5 番目のパラメータは、4 番目のパラメータに設定したフラグに適合するように設定されたメンバのある DDOVERLAYFX 構造体のアドレスとなる。

ハードウェアが 1 つのオーバーレイ サーフェスだけをサポートし、そのサーフェスが使われている場合、UpdateOverlay メソッドは DDERR_OUTOFCAPS を返して失敗する。また、UpdateOverlay が失敗すると、ハードウェアが小さすぎる最小伸縮係数を不正確に報告した可能性を考慮して、転送先矩形の幅を広げようとするかもしれない。しかし、これはまれにしか起こらず、UpdateOverlay が成功しない場合、Mosquito は単に失敗する。

次項 :ステップ 5 : オーバーレイ表示位置の更新