方法:インデックス バッファーの作成
インデックス バッファーには、インデックス データが格納されます。ここでは、レンダリングの準備のためにインデックス バッファーを初期化する方法について説明します。
インデックス バッファーを初期化するには
- インデックス情報を格納するバッファーを作成します。
- D3D11_BUFFER_DESC 構造体に値を競って値して、バッファーの記述を作成します。D3D11_BIND_INDEX_BUFFER フラグを BindFlags メンバーに渡し、このバッファーのサイズ (バイト) を ByteWidth メンバーに渡します。
- D3D11_SUBRESOURCE_DATA 構造体に値を設定して、サブリソース データの記述を作成します。pSysMem メンバーは、手順 1 で作成したインデックス データを直接指している必要があります。
- D3D11_BUFFER_DESC 構造体、D3D11_SUBRESOURCE_DATA 構造体、および初期化する ID3D11Buffer インターフェイスのポインターのアドレスを指定して、ID3D11Device::CreateBuffer を呼び出します。
次のコード例は、インデックス バッファーを作成する方法を示しています。この例では、g_pd3dDevice が有効な ID3D11Device オブジェクトであり、g_pd3dContext が有効な ID3D11DeviceContext オブジェクトであることを前提としています。
ID3D11Buffer *g_pIndexBuffer = NULL; // Create indices. unsigned int indices[] = { 0, 1, 2 }; // Fill in a buffer description. D3D11_BUFFER_DESC bufferDesc; bufferDesc.Usage = D3D11_USAGE_DEFAULT; bufferDesc.ByteWidth = sizeof( unsigned int ) * 3; bufferDesc.BindFlags = D3D11_BIND_INDEX_BUFFER; bufferDesc.CPUAccessFlags = 0; bufferDesc.MiscFlags = 0; // Define the resource data. D3D11_SUBRESOURCE_DATA InitData; InitData.pSysMem = indices; InitData.SysMemPitch = 0; InitData.SysMemSlicePitch = 0; // Create the buffer with the device. hr = g_pd3dDevice->CreateBuffer( &bufferDesc, &InitData, &g_pIndexBuffer ); if( FAILED( hr ) ) return hr; // Set the buffer. g_pd3dContext->IASetIndexBuffer( g_pIndexBuffer, DXGI_FORMAT_R32_UINT, 0 );