Example #1
0
BasicModel::BasicModel(ID3D11Device* device, const ModelLoader& modelLoader) :
    texture_(device, "red-ball-graphics/src/main/resources/seafloor.dds"),
    samplerState_(device),
    vertexCount_(modelLoader.indices()->size())
{
    assert(vertexCount_ > 0);

    D3D11_BUFFER_DESC vertexBufferDesc;
    ZeroMemory(&vertexBufferDesc, sizeof(vertexBufferDesc));
    vertexBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
    vertexBufferDesc.ByteWidth = modelLoader.vertices()->size() * sizeof(Vertex);
    vertexBufferDesc.Usage = D3D11_USAGE_DEFAULT;

    D3D11_SUBRESOURCE_DATA vertexBufferData;
    ZeroMemory(&vertexBufferData, sizeof(vertexBufferData));
    vertexBufferData.pSysMem = &modelLoader.vertices()->front();

    check(
            device->CreateBuffer(&vertexBufferDesc, &vertexBufferData, &vertexBuffer_.get()),
            "CreateBuffer failed for vertex buffer"
            );

    D3D11_BUFFER_DESC indexBufferDesc;
    ZeroMemory(&indexBufferDesc, sizeof(indexBufferDesc));
    indexBufferDesc.BindFlags = D3D11_BIND_INDEX_BUFFER;
    indexBufferDesc.ByteWidth = modelLoader.indices()->size() * sizeof(unsigned long);
    indexBufferDesc.Usage = D3D11_USAGE_DEFAULT;

    D3D11_SUBRESOURCE_DATA indexBufferData;
    ZeroMemory(&indexBufferData, sizeof(indexBufferData));
    indexBufferData.pSysMem = &modelLoader.indices()->front();

    check(
            device->CreateBuffer(&indexBufferDesc, &indexBufferData, &indexBuffer_.get()),
            "CreateBuffer failed for index buffer"
            );
}