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。使用 SUCCEEDED
或 FAILED
宏,或使用 DX::ThrowIfFailed
帮助程序。您的代码不会检查来自 CreateBuffer
的 HREUSLT,这可能是关键。
其次,启用 Direct3D DEBUG 设备并在调试输出中查找错误或警告 window。这通常会立即指出 API 使用或参数验证的问题。参见 this post。
所以我开始使用 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。使用 SUCCEEDED
或 FAILED
宏,或使用 DX::ThrowIfFailed
帮助程序。您的代码不会检查来自 CreateBuffer
的 HREUSLT,这可能是关键。
其次,启用 Direct3D DEBUG 设备并在调试输出中查找错误或警告 window。这通常会立即指出 API 使用或参数验证的问题。参见 this post。