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

Present 関数は、アプリケーションがレンダリングを完了したことをユーザー モードディスプレイドライバーに通知し、ドライバーがコピーまたは反転によってソースサーフェスを表示するか、ドライバーがカラーフィル操作を実行することを要求します。

構文

PFND3DDDI_PRESENT Pfnd3dddiPresent;

HRESULT Pfnd3dddiPresent(
  HANDLE hDevice,
  const D3DDDIARG_PRESENT *unnamedParam2
)
{...}

パラメーター

hDevice

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

unnamedParam2

pData [in]

表示するリソースを記述する D3DDDIARG_PRESENT 構造体へのポインター。

戻り値

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

リターン コード 説明
S_OK リソースが正常に表示されます。
E_OUTOFMEMORY Present では、完了するために必要なメモリを割り当てませんでした。

注釈

Microsoft Direct3D ランタイムは、ユーザー モードディスプレイドライバーの Present 関数を呼び出して、アプリケーションがレンダリングを完了したことをユーザーモードディスプレイドライバーに通知し、ドライバーがソースサーフェスを表示するか、ドライバーがカラーフィル操作を実行するように要求します。 pData パラメーターが指すD3DDDIARG_PRESENT構造体の hSrcResource メンバーが NULL 以外の場合、Present はユーザー モード ディスプレイ ドライバーに新しいコンテンツを画面に表示するように要求します。hSrcResourceNULL の場合は、ユーザー モードディスプレイドライバーが画面に対してカラーフィル操作を実行するように要求します。

D3DDDIARG_PRESENT構造体の hDstResource メンバーが NULL の場合、変換先サーフェスは不明です。 さらに、DMA を介してグラフィックス プロセッサにハードウェア コマンド ストリームを送信する前に、宛先サーフェスとクリッピング四角形の一覧がカーネル モードで決定されます。

その結果、ユーザー モード ディスプレイ ドライバーは、現在の操作を実行するハードウェア命令を生成できません。 これらのハードウェア命令は、ディスプレイ ミニポート ドライバーによって生成される必要があります。 ただし、D3DDDIARG_PRESENTの hSrcResource メンバーが NULL 以外の場合、ユーザー モードディスプレイ ドライバーは、ソースサーフェイスへの割り当てハンドルを派生させ、pfnPresentCb 関数の呼び出しでD3DDDICB_PRESENT構造体の hSrcAllocation メンバーにこのハンドルを挿入する必要があります。 ディスプレイ ミニポート ドライバーは、ハードウェア命令を正常に生成できます。 通常、ユーザー モード ディスプレイ ドライバーは、 D3DDDIARG_PRESENT 構造体のリソース情報から割り当てハンドルを派生させます。

D3DDDIARG_PRESENTの hDstResource メンバーが NULL 以外の場合、現在の宛先サーフェスは既知であり、ユーザー モードディスプレイ ドライバーは、D3DDDICB_PRESENThDstAllocation メンバーに対応する割り当てハンドルを入力する必要があります。

ユーザー モード ディスプレイ ドライバーが、0x0000000C未満の DDI バージョンを公開する場合 (ドライバーは、ドライバーの OpenAdapter 関数の呼び出しでD3D10DDIARG_OPENADAPTER構造体の DriverVersion メンバーでこの値を返します)、Direct3D ランタイムは、ユーザー モードディスプレイ ドライバーの Flush 関数を呼び出して、ランタイムがユーザー モードディスプレイ ドライバーの Present 関数を呼び出す前に、コマンド バッファー内の未処理のハードウェア コマンドを送信します。 このようにして、ユーザー モード ディスプレイ ドライバーの Present 関数は、レンダリング操作 (つまり、 pfnRenderCb 関数の呼び出し) でシリアル化されます。 ユーザー モード ディスプレイ ドライバーが DDI バージョンの 0x0000000C 以降を公開し、呼び出し元のアプリケーションがウィンドウ モードで実行されている場合、ランタイムは Present を呼び出す前に Flush も呼び出します。 ユーザー モードディスプレイドライバーが DDI バージョンの0x0000000C以上を公開していて、呼び出し元のアプリケーションが全画面表示モードで実行されている場合、ランタイムは Present を呼び出す前に Flush を呼び出しません。 この動作により、独自のスレッド処理を実装するドライバーは、現在の呼び出しをキューに登録できます。 DDI バージョンの 0x0000000C 以降を公開するドライバーは、pfnPresentCb 関数を呼び出す前に、pfnRenderCb を呼び出して未処理のコマンド バッファーを内部的にフラッシュする必要があります。

要件

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

こちらもご覧ください

D3DDDIARG_PRESENT

D3DDDI_DEVICEFUNCS

DxgkDdiPresent

DxgkDdiRender

フラッシュ

pfnRenderCb