IDirect3DSurface9::LockRect
サーフェス上の矩形をロックします。
HRESULT
LockRect(
D3DLOCKED_RECT * pLockedRect,
CONST RECT * pRect,
DWORD Flags
);
パラメータ
- pLockedRect
ロックされた領域を表す D3DLOCKED_RECT 構造体へのポインター。 - pRect
ロックする矩形へのポインター。RECT 構造体へのポインターにより指定されます。このパラメーターに NULL を指定すると、サーフェス全体を覆うようにダーティ領域が拡大します。 - Flags
実行するロックのタイプを指定する、0 個以上のロッキング フラグの組み合わせ。このメソッドに使用できるフラグを次に示します。- D3DLOCK_DISCARD
- D3DLOCK_DONOTWAIT
- D3DLOCK_NO_DIRTY_UPDATE
- D3DLOCK_NOSYSLOCK
- D3DLOCK_READONLY D3DLOCK_DISCARD を使用するときに対象を指定することはできません。フラグについては、「D3DLOCK」を参照してください。
戻り値
メソッドが成功した場合は、D3D_OK を返します。
失敗した場合は、D3DERR_INVALIDCALL または D3DERR_WASSTILLDRAWING が返されます。
解説
D3DLOCK_DONOTWAIT フラグを指定した場合に、ドライバーがサーフェスをすぐにロックできないと、IDirect3DSurface9::LockRect は D3DERR_WASSTILLDRAWING を返します。これは、ドライバーによるサーフェスのロックを待っている間に、アプリケーションで CPU サイクルを利用できるようにするためです。
深度ステンシル サーフェスでロック可能な唯一のフォーマットは、D3DFMT_D16_LOCKABLE です。「D3DFORMAT」を参照してください。
パフォーマンス上の理由により、ダーティ領域はレベル ゼロのテクスチャーの場合にのみ記録されます。ダーティ領域は、D3DLOCK_NO_DIRTY_UPDATE も D3DLOCK_READONLY も指定しないで IDirect3DSurface9::LockRect が呼び出されると、自動的に記録されます。詳細については、「IDirect3DDevice9::UpdateTexture」を参照してください。
マルチサンプル バック バッファーはロックすることができません。
このメソッドでは、D3DUSAGE_RENDERTARGET を使用して作成されたテクスチャー リソースに含まれるサーフェスのデータを取得することができません。そのようなテクスチャーは D3DPOOL_DEFAULT メモリーに割り当てる必要があるので、ロック可能でないためです。そのような場合は、代わりに IDirect3DDevice9::GetRenderTargetData を使用してデバイス メモリーからシステム メモリーにテクスチャー データをコピーします。
要件
ヘッダー: D3D9.h 宣言