IASetVertexBuffers 不工作

IASetVertexBuffers Not Working

所以我开始使用 DirectX11 创建程序。我无法理解为什么当我使用 IASetVertexBuffers() 时,当我使用 1 作为数组中缓冲区的数量时会出现错误。但是当我将值切换为 0 时,它加载得很好。它的值必须为 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;
}

需要如下但我得到一个错误

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

您需要检查所有 return HRESULT 而不是无效的 Direct3D 函数的 HRESULT。使用 SUCCEEDEDFAILED 宏,或使用 DX::ThrowIfFailed 帮助程序。您的代码不会检查来自 CreateBuffer 的 HREUSLT,这可能是关键。

其次,启用 Direct3D DEBUG 设备并在调试输出中查找错误或警告 window。这通常会立即指出 API 使用或参数验证的问题。参见 this post