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 メンバー内の新しく作成されたカーネル モード オーバーレイ オブジェクトへのハンドルを返します。 ユーザー モード ディスプレイ ドライバーは、次の関数の呼び出しでこのハンドルを渡します。

次のコード例は、オーバーレイ オブジェクトを作成する方法を示しています。
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 オペレーティング システムで使用できます。
対象プラットフォーム デスクトップ
Header d3dumddi.h (D3dumddi.h を含む)

こちらもご覧ください

D3DDDICB_CREATEOVERLAY

D3DDDI_DEVICECALLBACKS

pfnDestroyOverlayCb

pfnFlipOverlayCb

pfnUpdateOverlayCb