Nanashi-soft○プログラマ専用○DirectX11開発○
//インデックスバッファ作成同じCreateBufferを使用するところといい,頂点バッファーと同じ発想で多重化できる事が容易に想像できます
// D3D11_BUFFER_DESC hBufferDesc;
hBufferDesc.ByteWidth = sizeof(unsigned short) * INDEXSU;
hBufferDesc.Usage = D3D11_USAGE_DEFAULT;
hBufferDesc.BindFlags = D3D11_BIND_INDEX_BUFFER;
hBufferDesc.CPUAccessFlags = 0;
hBufferDesc.MiscFlags = 0;
hBufferDesc.StructureByteStride = sizeof(unsigned short);
// D3D11_SUBRESOURCE_DATA hSubResourceData;
hSubResourceData.pSysMem = hIndexData;
hSubResourceData.SysMemPitch = 0;
hSubResourceData.SysMemSlicePitch = 0;
ID3D11Buffer* hpIndexBuffer;
if(FAILED(hpDevice->CreateBuffer(&hBufferDesc, &hSubResourceData, &hpIndexBuffer))){
MessageBoxW(hWnd, L"CreateBuffer Index", L"Err", MB_ICONSTOP);
goto End;
}
//そのインデックスバッファをコンテキストに設定
hpDeviceContext->IASetIndexBuffer(hpIndexBuffer, DXGI_FORMAT_R16_UINT, 0);
#define MODELDATA_MAX 2メインループで,それをセットして描画する
int INDEXSU[2];
ID3D11Buffer *idxBuf[MODELDATA_MAX];
~略~
for(int mdcnt=0; mdcnt < MODELDATA_MAX; mdcnt++){
~略~
//インデックスバッファ作成
hBufferDesc.ByteWidth = sizeof(unsigned short) * INDEXSU[mdcnt];
hBufferDesc.Usage = D3D11_USAGE_DEFAULT;
hBufferDesc.BindFlags = D3D11_BIND_INDEX_BUFFER;
hBufferDesc.CPUAccessFlags = 0;
hBufferDesc.MiscFlags = 0;
hBufferDesc.StructureByteStride = sizeof(unsigned short);
hSubResourceData.pSysMem = hIndexData;
hSubResourceData.SysMemPitch = 0;
hSubResourceData.SysMemSlicePitch = 0;
if(FAILED(hpDevice->CreateBuffer(&hBufferDesc, &hSubResourceData, &idxBuf[mdcnt]))){
MessageBoxW(hWnd, L"CreateBuffer Index", L"Err", MB_ICONSTOP);
goto End;
}
~略~
}
for(int mdcnt=0; mdcnt < MODELDATA_MAX; mdcnt++){インデックス数とインデックスバッファーのポインターを保管しておけば,描画可能です
~略~
//インデックスバッファー切り替え
hpDeviceContext->IASetIndexBuffer(idxBuf[mdcnt], DXGI_FORMAT_R16_UINT, 0);
~略~
//インデックス描画
hpDeviceContext->DrawIndexed(INDEXSU[mdcnt], 0, 0);
}