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 ヘルパー関数を使用する。