次の方法で共有


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 が指定する format 属性に変換する必要があります。 その後、ドライバーは pfnSetDisplayModeCb を再度呼び出す必要があります。 ドライバーは、新しい割り当てを割り当て、古いプライマリ サーフェスから新しいへの変換ビット ブロック転送 (ビットblt) を実行し、ドライバーが後続のすべての操作にこの割り当てに新しい割り当てハンドルを使用している限り、古いプライマリを破棄できます。 ドライバーは、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 オペレーティング システムで使用できます。
対象プラットフォーム デスクトップ
Header d3dumddi.h (D3dumddi.h を含む)

こちらもご覧ください

D3DDDICB_SETDISPLAYMODE

D3DDDI_DEVICECALLBACKS

SetDisplayMode

SetDisplayModeDXGI