我正在尝试在 Direct3D11 中创建实例化几何图形,ID3D11DeviceContext1->Map()
当我尝试更新实例缓冲区时,调用失败并出现非常有用的“无效参数”错误。
缓冲区被声明为成员变量:
Microsoft::WRL::ComPtr<ID3D11Buffer> m_instanceBuffer;
然后我创建它(成功):
D3D11_BUFFER_DESC instanceDesc;
ZeroMemory(&instanceDesc, sizeof(D3D11_BUFFER_DESC));
instanceDesc.Usage = D3D11_USAGE_DYNAMIC;
instanceDesc.ByteWidth = sizeof(InstanceData) * MAX_INSTANCE_COUNT;
instanceDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
instanceDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
instanceDesc.MiscFlags = 0;
instanceDesc.StructureByteStride = 0;
DX::ThrowIfFailed(d3dDevice->CreateBuffer(&instanceDesc, NULL, &m_instanceBuffer));
但是,当我尝试映射它时:
D3D11_MAPPED_SUBRESOURCE inst;
DX::ThrowIfFailed(d3dContext->Map(m_instanceBuffer.Get(), 0, D3D11_MAP_WRITE, 0, &inst));
地图调用失败并显示E_INVALIDARG
. 没有什么是NULL
不正确的,这是我的第一个 D3D 应用程序之一,我目前不知道下一步该做什么来追踪它。我想我一定是错误地创建了缓冲区,但我不知道怎么做。任何输入将不胜感激。