Nanashi-soft○プログラマ専用○DirectX11開発○
//頂点バッファ作成この後,DrawやDrawIndexedで描画を行います
D3D11_BUFFER_DESC hBufferDesc;
hBufferDesc.ByteWidth = sizeof(Vertex3D) * TYOUTEN;
hBufferDesc.Usage = D3D11_USAGE_DEFAULT;
hBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
hBufferDesc.CPUAccessFlags = 0;
hBufferDesc.MiscFlags = 0;
hBufferDesc.StructureByteStride = sizeof(float);
D3D11_SUBRESOURCE_DATA hSubResourceData;
hSubResourceData.pSysMem = hVectorData;
hSubResourceData.SysMemPitch = 0;
hSubResourceData.SysMemSlicePitch = 0;
ID3D11Buffer* hpBuffer;
if(FAILED(hpDevice->CreateBuffer(&hBufferDesc, &hSubResourceData, &hpBuffer))){
MessageBoxW(hWnd, L"CreateBuffer", L"Err", MB_ICONSTOP);
goto End;
}
//その頂点バッファをコンテキストに設定
UINT hStrides = sizeof(Vertex3D);
UINT hOffsets = 0;
hpDeviceContext->IASetVertexBuffers(0, 1, &hpBuffer, &hStrides, &hOffsets);
hSubResourceData.pSysMem = hVectorData;そうすると,別のモデルデータに切り替える為には,CreateBufferから必要になりますよね?
#define MODELDATA_MAX 2メインループで,それをセットして描画する
int TYOUTEN[2];
ID3D11Buffer *vctBuf[MODELDATA_MAX];
~略~
for(int mdcnt=0; mdcnt < MODELDATA_MAX; mdcnt++){
~略~
//頂点バッファ作成
D3D11_BUFFER_DESC hBufferDesc;
hBufferDesc.ByteWidth = sizeof(Vertex3D) * TYOUTEN[mdcnt];
hBufferDesc.Usage = D3D11_USAGE_DEFAULT;
hBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
hBufferDesc.CPUAccessFlags = 0;
hBufferDesc.MiscFlags = 0;
hBufferDesc.StructureByteStride = sizeof(float);
D3D11_SUBRESOURCE_DATA hSubResourceData;
hSubResourceData.pSysMem = hVectorData;
hSubResourceData.SysMemPitch = 0;
hSubResourceData.SysMemSlicePitch = 0;
if(FAILED(hpDevice->CreateBuffer(&hBufferDesc, &hSubResourceData, &vctBuf[mdcnt]))){
MessageBoxW(hWnd, L"CreateBuffer", L"Err", MB_ICONSTOP);
goto End;
}
~略~
}
for(int mdcnt=0; mdcnt < MODELDATA_MAX; mdcnt++){頂点数と頂点バッファーのポインターを保管しておけば,描画可能です
~略~
//頂点バッファー切り替え
UINT hStrides = sizeof(Vertex3D);
UINT hOffsets = 0;
hpDeviceContext->IASetVertexBuffers(0, 1, &vctBuf[mdcnt], &hStrides, &hOffsets);
~略~
//頂点描画
hpDeviceContext->Draw(TYOUTEN[mdcnt], 0);
}