Platform SDK: DirectX

ステップ 2 : ハードウェア オーバーレイ サポートのテスト

[Visual Basic]

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

[C++]

DirectDraw を初期化した後、デバイスがオーバーレイ サーフェスをサポートすることを確認する必要がある。DirectDraw はオーバーレイをエミュレートしないため、ハードウェア デバイス ドライバがオーバーレイをサポートしない場合には続行できない。オーバーレイ サポートをテストするには、IDirectDraw7::GetCaps メソッドでデバイス ドライバの能力を取得する。この呼び出し後、関連する DDCAPS 構造体の dwFlags メンバで DDCAPS_OVERLAY フラグを探す。このフラグがあれば、ディスプレイ ハードウェアはオーバーレイをサポートする。このフラグがなければ、そのデバイスではオーバーレイ サーフェスを利用できない。

Mosquito サンプル アプリケーションにおける次の例では、ハードウェア オーバーレイ サポートのテスト方法について示す。

BOOL AreOverlaysSupported()
{
    DDCAPS  capsDrv;
    HRESULT ddrval;
 
    // ドライバ能力を取得し、オーバーレイ サポートを決定する。
    ZeroMemory(&capsDrv, sizeof(capsDrv));
    capsDrv.dwSize = sizeof(capsDrv);
 
    ddrval = g_lpdd->GetCaps(&capsDrv, NULL);
    if (FAILED(ddrval))
        return FALSE;
 
    // 現在のモードで、ドライバがオーバーレイをサポートするか?
    // (現在、DirectDraw エミュレーション レイヤはオーバーレイをサポートしていない。
    // ハードウェア サポートがなければ、オーバーレイに関する API は失敗する。
    if (!(capsDrv.dwCaps & DDCAPS_OVERLAY))
        return FALSE;
 
    return TRUE;
} 

上記の例では、IDirectDraw7::GetCaps メソッドを呼び出してデバイス ドライバ能力を取得する。呼び出しの最初のパラメータは、デバイス ドライバの能力を記述する情報で埋め込まれる DDCAPS のアドレスである。アプリケーションは、エミュレーション能力に関する情報を必要としないため、2 番目のパラメータは NULL に設定する。

ドライバ能力を取得した後、この例では、論理演算の AND 処理で dwCaps メンバの DDCAPS_OVERLAY フラグの存在を調べる。フラグがない場合、この例では失敗を示す FALSE を返す。フラグがある場合は、デバイス ドライバがオーバーレイ サーフェスをサポートすることを示す TRUE を返す。

このコードで、他のオーバーレイ サーフェスが他のアプリケーションで使用されていないことを確認するとよい。そのためには、DDCAPS 構造体の dwMaxVisibleOverlays および dwCurrentVisibleOverlays メンバを調べる。

次項 :ステップ 3 : オーバーレイ サーフェスの作成