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 の場合、Present はユーザー モードディスプレイ ドライバーが画面に対してカラーフィル操作を実行するように要求します。

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