Microsoft DirectX 8.0 (C++)

IDirect3DVertexBuffer8::Lock

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

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

パラメータ

OffsetToLock
[in] ロックする頂点データへのオフセット (バイト単位)。
SizeToLock
[in] ロックする頂点データのサイズ (バイト単位)。0 を指定すると、頂点バッファ全体がロックされる。
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 を使用。

参照

IDirect3DVertexBuffer8::Unlock