Microsoft DirectX 8.0 (C++)

IDirect3DIndexBuffer8::Lock

インデックス データの範囲をロックし、インデックス バッファ メモリへのポインタを取得する。

HRESULT Lock(
  UINT OffsetToLock,
  UINT SizeToLock,
  BYTE** ppbData,
  DWORD Flags
);

パラメータ

OffsetToLock
[in] ロックするインデックス データへのオフセット (バイト単位)。
SizeToLock
[in] ロックするインデックス データのサイズ (バイト単位)。
ppbData
[out] 返されるインデックス データが格納される BYTE 値配列へのポインタのアドレス。
Flags
[in] 0 個以上のロッキング フラグの組み合わせ。インデックス バッファ メモリをロックする方法を示す。
D3DLOCK_DISCARD
アプリケーションは、書き込み専用処理でインデックス バッファ全体を上書きする。これにより、Direct3D は新しいメモリ領域へのポインタを返すことができるので、ダイナミック メモリ アクセス (DMA) と古い領域からのレンダリングが機能停止することはない。
D3DLOCK_NOOVERWRITE
フレームの開始以降、またはこのフラグが指定されていない最後のロック以降に描画処理の呼び出しの中で参照されたインデックスは、ロック中に変更されないことを示す。インデックス バッファへのデータの追加だけを行う場合は、このフラグにより処理を最適化できる。
D3DLOCK_NOSYSLOCK
ビデオ メモリ ロックのデフォルトの動作は、システムのクリティカル セクションを確保することで、ロック中にディスプレイ モードの変更が行われないことを保証する。このフラグは、システムワイドなクリティカル セクションがロックの間保持されないようにする。

ロック処理は若干負荷が高くなるが、マウス カーソルの移動など、システムでほかの処理を実行することが可能になる。このフラグは、ソフトウェア レンダリングのバックバッファのロックのように、ロックが長時間に及び、システムの応答性に悪影響を与えてしまうようなロックに対して有効である。

D3DLOCK_READONLY
アプリケーションはバッファに書き込みを行わない。これにより、いくらかの最適化が実現する。D3DLOCK_READONLY は D3DLOCK_DISCARD と共に指定することはできない。また、D3DUSAGE_WRITEONLY で作成された頂点バッファに指定することもできない。

戻り値

成功した場合は、D3D_OK を返す。

失敗した場合は、D3DERR_INVALIDCALL を返す。

注意

インデックス バッファの処理では、ロックの呼び出しを複数回行える。ただし、ロックの呼び出し回数とアンロックの呼び出し回数が一致している必要がある。現在設定しているインデックス バッファでロック カウントが残っている場合、DrawPrimitive の呼び出しは失敗する。

D3DLOCK_DISCARD および D3DLOCK_NOOVERWRITE フラグは、D3DUSAGE_DYNAMIC で作成されたバッファに対してのみ有効である。

D3DLOCK_DISCARD または D3DLOCK_NOOVERWRITE を Lock メソッドの Flags パラメータで使用する方法については、「動的な頂点およびインデックス バッファの使い方」を参照すること。

動作環境

  ヘッダー : d3d8.h で宣言。
  インポート ライブラリ : D3d8.lib を使用。

参照

IDirect3DIndexBuffer8::Unlock