讓我的CBuffer在HLSL中變得非常沮喪D3D11沒有更新,初始值在應用程序啓動時設置,但更新是NoGo,使用UpdateSubResource,也嘗試過ID3D11DeviceContext :: Map & ID3D11DeviceContext :: UnMap。Constant Buffer DirectX 11
注意:使用D3D11_USAGE_DYNAMIC設置CBuffer & D3D11_CPU_ACCESS_WRITE。
我ID3D11Buffer(常數緩衝)只返回4個字節時,它的大小進行查詢....聽起來像問題
struct VS_CBUFFER_DATA
{
XMFLOAT4X4 world;
XMFLOAT4X4 view;
XMFLOAT4X4 projection;
VS_CBUFFER_DATA()
{
XMStoreFloat4x4(&world, DirectX::XMMatrixIdentity());
XMStoreFloat4x4(&view, DirectX::XMMatrixIdentity());
XMStoreFloat4x4(&projection, DirectX::XMMatrixIdentity());
}
};
D3D11_BUFFER_DESC cbufferDesc;
memset(&cbufferDesc, 0, sizeof(cbufferDesc));
cbufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER
cbufferDesc.Usage = D3D11_USAGE_DYNAMIC;
cbufferDesc.ByteWidth = sizeof(m_CBufferData);
cbufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
cbufferDesc.MiscFlags = 0;
cbufferDesc.StructureByteStride = 0;
D3D11_SUBRESOURCE_DATA subdata;
memset(&subdata, 0, sizeof(subdata));
subdata.pSysMem = &m_CBufferData;
if (FAILED(pRendererTemp->CreateBuffer(cbufferDesc
{
OutputDebugString("Failed to create CBuffer!")
goto failed;
}
void Cube::UpdateViewProjection(__in const Renderer* pRenderer, __in const XMFLOAT4X4 &view, __in const XMFLOAT4X4 &proj)
{
D3D11_MAPPED_SUBRESOURCE mappedSubResource;
memset(&mappedSubResource, 0, sizeof(mappedSubResource));
if (SUCCEEDED(pRenderer->GetDevContext()->Map(m_pCBuffer, 0, D3D11_MAP_WRITE_NO_OVERWRITE, 0, &mappedSubResource)))
{
Primitive::UpdateViewProjection(NULL, view, proj);
VS_CBUFFER_DATA* cbData = (VS_CBUFFER_DATA*)&mappedSubResource.pData;
memcpy(cbData, &m_CBufferData, sizeof(cbData));
pRenderer->GetDevContext()->Unmap(m_pCBuffer, 0);
SetBuffers(pRenderer);
}
}
// SHADER.vsh
cbuffer cbMatrixBuffer : register(b0)
{
float4x4 world;
float4x4 view;
float4x4 projection;
};
因此,經過另一次仔細觀察,似乎當我「映射」資源時,常量緩衝區指針的值沒有得到更新。 – Sixjac 2014-12-01 22:25:09
如果您正在更新整個CB,請使用「 D3D11_MAP_WRITE_DISCARD''。另外,你在哪裏設置常量緩衝區來使用? 「VS_CBUFFER_DATA」的結構定義在哪裏? – 2014-12-02 08:02:43
嗨查克,是的,我一直這樣做,我的場景就消失了,VS_CBUFFER_DATA是3個XMFLOAT4X4的w,v&p矩陣16字節對齊。我通過UpdateSubResource更新了世界矩陣。乾杯 – Sixjac 2014-12-02 08:57:26