Search code examples
directx-11vertex-buffer

IASetVertexBuffers Not Working


So I'm beginning to create a program using DirectX11. I'm having a problem understanding why when I use IASetVertexBuffers() I get an error when I use 1 for the number of buffers in the array. But when I switch the value to 0 it loads just fine. It needs to have a value of 1.

BOOL Graphics::InitializeVertexBuffer(D3D11_USAGE Usage, INT BindFlags, INT CPUAccessFlags, INT MiscFlags)
{
    D3D11_BUFFER_DESC D3D11BufferDesc;
    D3D11BufferDesc.Usage = Usage;
    D3D11BufferDesc.ByteWidth = sizeof(VERTEX) * 3;
    D3D11BufferDesc.BindFlags = BindFlags;
    D3D11BufferDesc.CPUAccessFlags = CPUAccessFlags;
    D3D11BufferDesc.MiscFlags = MiscFlags;
    D3D11Device->CreateBuffer(&D3D11BufferDesc, NULL, &VertexBuffer);
    D3D11DeviceContext->IASetVertexBuffers(0, 0, &VertexBuffer, NULL, NULL);
    return 1;
}

It needs to be as follows but I get an error

BOOL Graphics::InitializeVertexBuffer(D3D11_USAGE Usage, INT BindFlags, INT CPUAccessFlags, INT MiscFlags)
{
    D3D11_BUFFER_DESC D3D11BufferDesc;
    D3D11BufferDesc.Usage = Usage;
    D3D11BufferDesc.ByteWidth = sizeof(VERTEX) * 3;
    D3D11BufferDesc.BindFlags = BindFlags;
    D3D11BufferDesc.CPUAccessFlags = CPUAccessFlags;
    D3D11BufferDesc.MiscFlags = MiscFlags;
    D3D11Device->CreateBuffer(&D3D11BufferDesc, NULL, &VertexBuffer);
    D3D11DeviceContext->IASetVertexBuffers(0, 1, &VertexBuffer, NULL, NULL);
    return 1;
}

Solution

  • You need to check the HRESULT for all Direct3D functions that return HRESULT rather than void. Use the SUCCEEDED or FAILED macros, or use the DX::ThrowIfFailed helper. Your code does nothing to check the HREUSLTs from CreateBuffer which is likely key.

    Second, enable the Direct3D DEBUG device and look for errors or warnings in the debug output window. That usually points immediately to the problem with API usage or parameter validation. See this post.