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" ); }