我在计算着色器中有一个结构化缓冲区,它应该保存关于几个灯光、位置、方向、颜色等的信息。我已经设法将信息输入到计算着色器中,但值不正确。一个 float4(1.0, 0.0, 0.0, 1.0);应该给我红色,但由于某种原因,我在写入后备缓冲区时变成紫色。
我在哪里绑定信息并将其发送到 computeshader
if (FAILED(immediateContext->Map(lightBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mpdResource)))
{
return false;
}
std::vector<LightBufferType> lightsBuf(2);
DirectX::XMMATRIX matrix;
for (int i = 0; i < 2; i++)
{
lightsBuf[i].lightPos = lights[i].GetPos();
lightsBuf[i].lightDir = lights[i].GetDir();
lights[i].GetViewMatrix(matrix);
lightsBuf[i].lightViewMatrix = DirectX::XMMatrixTranspose(matrix);
lights[i].GetProjMatrix(matrix);
lightsBuf[i].lightProjMatrix = DirectX::XMMatrixTranspose(matrix);
lightsBuf[i].lightColor = lights[i].GetDiffCol();
lightsBuf[i].angle = 30.0f;
lightsBuf[i].type = lights[i].GetType();
}
memcpy(mpdResource.pData, lightsBuf.data(), sizeof(LightBufferType) * 2);
immediateContext->Unmap(lightBuffer, 0);
immediateContext->CSSetShaderResources(6, 1, &structuredSRV);
我的假设是我的问题是我在 memcpy 中使用了不正确的大小
向计算着色器发送结构化缓冲区,但它的值不正确