次の方法で共有


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

Lock 関数は、指定されたリソースまたはリソース内のサーフェスをロックします。

構文

PFND3DDDI_LOCK Pfnd3dddiLock;

HRESULT Pfnd3dddiLock(
  HANDLE hDevice,
  D3DDDIARG_LOCK *unnamedParam2
)
{...}

パラメーター

hDevice

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

unnamedParam2

pData [in, out]

ロックするリソース内のリソースまたはサーフェスを記述する D3DDDIARG_LOCK 構造体へのポインター。

戻り値

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

リターン コード 説明
S_OK リソースが正常にロックされています。
E_OUTOFMEMORY ロックが完了するために必要なメモリを割り当てませんでした。
D3DDDIERR_WASSTILLDRAWING Microsoft Direct3D ランタイムが Lock 関数を呼び出し、DoNotWait ビット フィールド フラグが D3DDDIARG_LOCK の Flags メンバーに設定されている場合、リソース アイドル状態になりませんでした。

注釈

Microsoft Direct3D ランタイムは、ユーザー モードディスプレイ ドライバーの Lock 関数を呼び出して、リソースまたはリソース内のサーフェスをロックします。 このロックされたリソースまたはサーフェスは、CPU からの読み取り操作と書き込み操作を使用して読み取りまたは書き込みを行うことができます。 ランタイムが Lock を呼び出すとき、ユーザー モードのディスプレイ ドライバーは、リソースまたはサーフェスに対応する割り当てをロックするために、ランタイムの pfnLockCb コールバック関数を呼び出す必要があります。 ユーザー モード ディスプレイ ドライバーはリソースまたはサーフェスごとに複数の割り当てを割り当てることができるため、ランタイムに Lock 呼び出しを返す前に pfnLockCb から返される割り当てポインターを適切に変換または処理するために、ユーザー モードディスプレイ ドライバーが必要になる場合があることに注意してください。

通常、Lock の呼び出しの後には、ドライバーが描画プリミティブ関数の呼び出し (DrawIndexedPrimitive、DrawIndexedPrimitive2DrawPrimitive2、DrawPrimitive2 の呼び出し) を受け取る前、ドライバーの Unlock 関数の呼び出しを照合します。 この順序により、ドライバーがロックされたリソースから描画するように要求されることはありません。 ただし、ソフトウェア変換と照明を実行する場合、ランタイムはリソースのロックを解除する前にドライバーの描画プリミティブ関数のいずれかを呼び出す必要があります (現在、この動作を示すのは頂点バッファーのみです)。 ランタイムは、この一般的でない動作が発生する可能性がある頂点バッファーを、D3DDDIARG_CREATERESOURCE および D3DDDIARG_LOCK 構造体の Flags メンバーの MightDrawFromLocked ビット フィールド フラグでマークします (つまり、作成時とロック時の両方)。 ハードウェアがロックされた頂点バッファーからアクティブにレンダリングされる場合、ランタイムはロックされた頂点バッファー内のデータを上書きしないため、ドライバーは特別なアクションを実行する必要はありません。

ランタイムは、ユーザー モードディスプレイ ドライバーの Lock 関数を呼び出して、事前に割り当てられたシステム メモリ サーフェスもロックします。 この操作により、ユーザー モード ディスプレイ ドライバーは、ハードウェア コマンド ストリーム内にある可能性があるサーフェスへの参照を適切に同期できます。 ユーザー モード ディスプレイ ドライバーは、次の方法で同期を実行できます。

  • 必要に応じて未処理のコマンドをフラッシュする (つまり、ランタイムの pfnRenderCb コールバック関数を呼び出す)。
  • 既にハードウェアに送信されているコマンドの適切な割り当てハンドルを使用して pfnLockCb を呼び出します。
ユーザー モードディスプレイ ドライバーは、ロックされたサーフェスのメモリへのポインターと、D3DDDIARG_LOCK構造体の pSurfData メンバーと Pitch メンバー内のサーフェスの ピッチ を返します。 ただし、事前に割り当てられたシステム メモリサーフェスの場合、ランタイムはドライバーセットのメモリとピッチを無視しますが、ドライバーは ロック 呼び出しに失敗する可能性があります (そのため、アプリケーションにフェールバックします)。 ランタイムは、事前に割り当てられたシステム メモリ サーフェスをロックする Lock 呼び出しと他の Lock 呼び出しを区別するために、D3DDDIARG_LOCK構造体の Flags メンバーに NotifyOnly ビット フィールド フラグ設定します。

要件

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

こちらもご覧ください

D3DDDIARG_LOCK

D3DDDI_ALLOCATIONINFO

D3DDDI_DEVICEFUNCS

pfnLockCb

pfnRenderCb