次の方法で共有


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

pfnSetDisplayModeCb 関数は、ディスプレイへのスキャン アウトに使用される割り当てを設定します。

構文

PFND3DDDI_SETDISPLAYMODECB Pfnd3dddiSetdisplaymodecb;

HRESULT Pfnd3dddiSetdisplaymodecb(
  HANDLE hDevice,
  D3DDDICB_SETDISPLAYMODE *unnamedParam2
)
{...}

パラメーター

hDevice

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

unnamedParam2

pData [in, out]

スキャンアウトに使用される割り当てを記述する D3DDDICB_SETDISPLAYMODE 構造体へのポインター。

戻り値

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

リターン コード 説明
S_OK 表示モードが正常に設定されました。
E_INVALIDARG パラメーターが検証され、正しくないと判断されました。
D3DDDIERR_INCOMPATIBLEPRIVATEFORMAT ユーザー モードディスプレイ ドライバーは、D3DDDICB_SETDISPLAYMODE の hPrimaryAllocation メンバーが指定する割り当てに関連付けられているサーフェスの形式を、D3DDDICB_SETDISPLAYMODEの PrivateDriverFormatAttributemember が指定する形式属性に変換する必要があります。 その後、ドライバーは pfnSetDisplayModeCb をもう一度呼び出す必要があります。 ドライバーは、新しい割り当てを割り当て、古いプライマリ サーフェスから新しいサーフェスへのビット ブロック転送 (bitblt) の変換を実行し、ドライバーが後続のすべての操作にこの割り当てに新しい割り当てハンドルを使用している限り、古いプライマリを破棄できます。 ドライバーは、pfnSetDisplayModeCb が別の戻り値を返すまで、このプロセスを繰り返す必要があります。

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

備考

Microsoft Direct3D ランタイムは、ユーザー モード ディスプレイ ドライバーの SetDisplayMode を呼び出すか、または SetDisplayModeDXGI 関数を してプライマリ サーフェスをディスプレイにスキャンアウトするように設定した後、ユーザー モードディスプレイ ドライバーは、pfnSetDisplayModeCb 関数を呼び出して、スキャンアウトに使用される基になるプライマリ割り当てを設定します。

拡張形式、複数サンプリング メソッド、またはその両方を使用する新しい表示モードを設定するために pfnSetDisplayModeCb をユーザー モード ディスプレイ ドライバーが呼び出す前に、ドライバーは、現在の GDI 表示モードが新しい表示モードと同じ解像度であることを確認する必要があります。それ以外の場合、pfnSetDisplayModeCb はE_INVALIDARGを返します。
 

Direct3D バージョン 11 注: ドライバーが pfnSetDisplayModeCb 呼び出す方法の詳細については、「Direct3D 10からの変更」を参照してください。

次のコード例は、ディスプレイにスキャンアウトするための割り当てを設定する方法を示しています。

HRESULT CD3DContext::SetDisplayMode(CONST D3DDDIARG_SETDISPLAYMODE* pSetDisplayMode) {
    DWORD   dwSrcSurf = ((DWORD)(DWORD_PTR)pSetDisplayMode->hResource) + pSetDisplayMode->SubResourceIndex;
    HRESULT hr;
    // Timestamp the source surface
    m_RTbl[dwSrcSurf].m_qwBatch = m_qwBatch;
    // Send the presentation request to the display miniport driver
    D3DDDICB_SETDISPLAYMODE SetDisplayModeCBData = {0};

    SetDisplayModeCBData.hPrimaryAllocation = R200GetSurfaceAllocHandle(m_pR200Ctx,
                                        dwSrcSurf);

    hr = m_d3dCallbacks.pfnSetDisplayModeCb(m_hD3D, &SetDisplayModeCBData);

    return (hr);
}

必要条件

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

関連項目

D3DDDICB_SETDISPLAYMODE

D3DDDI_DEVICECALLBACKS

SetDisplayMode

SetDisplayModeDXGI