次の方法で共有


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

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

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

必要条件

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

関連項目

D3DDDIARG_LOCK

D3DDDI_ALLOCATIONINFO

D3DDDI_DEVICEFUNCS

pfnLockCb する

pfnRenderCb