gpt4 book ai didi

c++ - 在 Windows 应用商店应用程序中映射 Direct3D11 中的动态缓冲区

转载 作者:行者123 更新时间:2023-11-28 03:27:11 25 4
gpt4 key购买 nike

我正在尝试在 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));

map 调用失败 E_INVALIDARG .什么都不是 NULL不正确,这是我的第一个 D3D 应用程序之一,我目前对下一步要做什么来追踪它感到困惑。我在想我一定是错误地创建了缓冲区,但我看不出怎么做。任何输入将不胜感激。

最佳答案

因为缓冲区是用 D3D11_USAGE_DYNAMIC 创建的,所以它必须用 D3D_MAP_WRITE_DISCARD(或 D3D_MAP_WRITE_NO_OVERWRITE 映射,但这对我的应用程序不合适).

关于c++ - 在 Windows 应用商店应用程序中映射 Direct3D11 中的动态缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13616194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com