Microsoft DirectX 8.0 (Visual Basic)

インデックス バッファの内容へのアクセス

インデックス バッファを使用すると、Microsoft® Visual Basic® アプリケーションでは、インデックス バッファ内のインデックス データを簡単に更新できる。インデックス バッファをロック、設定、およびロック解除するには、D3DIndexBuffer8SetData ヘルパー関数を使用する。D3DVertexBuffer8SetData は、5 つのパラメータを受け取る。第 1 パラメータ Ibuffer は、インデックス データを格納する Direct3DIndexBuffer8 オブジェクトである。第 2 パラメータ Offset は、インデックス データへのオフセットである。第 3 パラメータは、インデックス データのサイズをバイト単位で示す。

第 4 パラメータ Flags は、メモリのロック方法をシステムに知らせる。このパラメータを使って、バッファ内のデータにアプリケーションがどのようにアクセスするかを示すことができる。アプリケーションがインデックス データにアクセスする方法に応じて、Flags パラメータに定数を指定する。これにより、ドライバはメモリをロックして、要求されているアクセス タイプでの最高のパフォーマンスを提供する。アプリケーションがインデックス バッファ メモリから読み出しのみを行う場合は、D3DLOCK_READONLY フラグを使用する。このフラグを含めると、Microsoft® Direct3D® が内部手順を最適化するので効率が上がる。ただし、メモリへのアクセスは読み出し専用になる。

D3DIndexBuffer8SetData ヘルパー関数が受け取る最後のパラメータ Data は、インデックス バッファにロードするデータの配列の最初の要素である。このパラメータは Any 型である。このパラメータを正しく使用するためには、Data に配列の最初の要素を指定する必要がある。次のコードに例を示す。

Dim Indices(2) As CUSTOMINDEX
Dim IndexSizeInBytes As Long

' インデックス データの長さを決定する。
IndexSizeInBytes = Len(Indices(0))

' インデックス バッファにインデックスをコピーする。
D3DIndexBuffer8SetData VB, 0, IndexSizeInBytes * 3, 0, Indices(0)

  D3DUSAGE_WRITEONLY フラグでインデックス バッファを作成した場合、D3DLOCK_READONLY ロッキング フラグは使用できない。アプリケーションがインデックス バッファ メモリから読み出しのみを行う場合は、D3DLOCK_READONLY フラグを使用する。このフラグを含めると、Direct3D が内部手順を最適化するので効率が上がる。ただし、メモリへのアクセスは読み出し専用になる。

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

インデックス バッファの内容をロック、読み出す、およびロック解除するには、D3DIndexBuffer8GetData ヘルパー関数を使用する。