次の方法で共有


PFND3DDDI_CREATEOVERLAYCB コールバック関数 (d3dumddi.h)

pfnCreateOverlayCb 関数は、カーネル モードオーバーレイ オブジェクトを作成し、オーバーレイを表示するディスプレイ ミニポート ドライバーを呼び出します。

構文

PFND3DDDI_CREATEOVERLAYCB Pfnd3dddiCreateoverlaycb;

HRESULT Pfnd3dddiCreateoverlaycb(
  HANDLE hDevice,
  D3DDDICB_CREATEOVERLAY *unnamedParam2
)
{...}

パラメーター

hDevice

ディスプレイ デバイスへのハンドル (グラフィックス コンテキスト)。

unnamedParam2

pData [in, out]

作成するオーバーレイを記述する D3DDDICB_CREATEOVERLAY 構造体へのポインター。

戻り値

pfnCreateOverlayCb は、次のいずれかの値を返します。

リターン コード 形容
S_OK オーバーレイ オブジェクトが正常に作成されました。
D3DDDIERR_NOTAVAILABLE オーバーレイ ハードウェアまたは帯域幅がないため、pfnCreateOverlayCb が失敗しました。
E_INVALIDARG パラメーターが検証され、正しくないと判断されました。
E_OUTOFMEMORY pfnCreateOverlayCb は、完了するために必要なメモリを割り当てませんでした。

この関数は、他の HRESULT 値を返す場合もあります。

備考

pfnCreateOverlayCb 関数は、pData が指す D3DDDICB_CREATEOVERLAY 構造体の hKernelOverlay メンバー内の新しく作成されたカーネル モード オーバーレイ オブジェクトハンドルを返します。 ユーザー モードのディスプレイ ドライバーは、次の関数の呼び出しでこのハンドルを渡します。

  • pfnDestroyOverlayCb

  • pfnFlipOverlayCb する

  • pfnUpdateOverlayCb

次のコード例は、オーバーレイ オブジェクトを作成する方法を示しています。
D3DKMT_HANDLE g_hOverlay = NULL;

HRESULT CD3DContext::CreateOverlay(D3DDDIARG_CREATEOVERLAY* pCreateOverlay) {
    D3DDDICB_CREATEOVERLAY CreateCB;
    DWORD_PTR dwResource = (DWORD_PTR) pCreateOverlay->OverlayInfo.hResource;
    dwResource += pCreateOverlay->OverlayInfo.SubResourceIndex;
    LONG dwTempPitch;

    pCreateOverlay->hOverlay = (HANDLE) 0x27;

    CreateCB.VidPnSourceId = 0;
    CreateCB.OverlayInfo.hAllocation = R200GetAllocationHandle(m_pR200Ctx,
                                     (DWORD)dwResource,
                                      &dwTempPitch);

    CreateCB.OverlayInfo.DstRect.left = pCreateOverlay->OverlayInfo.DstRect.left;
    CreateCB.OverlayInfo.DstRect.right = pCreateOverlay->OverlayInfo.DstRect.right;
    CreateCB.OverlayInfo.DstRect.top = pCreateOverlay->OverlayInfo.DstRect.top;
    CreateCB.OverlayInfo.DstRect.bottom = pCreateOverlay->OverlayInfo.DstRect.bottom;

    CreateCB.OverlayInfo.SrcRect.left = pCreateOverlay->OverlayInfo.SrcRect.left;
    CreateCB.OverlayInfo.SrcRect.right = pCreateOverlay->OverlayInfo.SrcRect.right;
    CreateCB.OverlayInfo.SrcRect.top = pCreateOverlay->OverlayInfo.SrcRect.top;
    CreateCB.OverlayInfo.SrcRect.bottom = pCreateOverlay->OverlayInfo.SrcRect.bottom;

    CreateCB.OverlayInfo.pPrivateDriverData = "This is a test";
    CreateCB.OverlayInfo.PrivateDriverDataSize = 10;

    HRESULT hr = m_d3dCallbacks.pfnCreateOverlayCb(m_hD3D, &CreateCB);

    if (SUCCEEDED(hr)) {
        g_hOverlay = CreateCB.hKernelOverlay;
    }

    return hr;
}

必要条件

要件 価値
サポートされる最小クライアント Windows Vista 以降のバージョンの Windows オペレーティング システムで使用できます。
ターゲット プラットフォーム デスクトップ
ヘッダー d3dumddi.h (D3dumddi.h を含む)

関連項目

D3DDDICB_CREATEOVERLAY

D3DDDI_DEVICECALLBACKS

pfnDestroyOverlayCb

pfnFlipOverlayCb する

pfnUpdateOverlayCb