将向量映射到结构化缓冲区会在计算着色器中给出不正确的值

问题描述 投票:0回答:0

我在计算着色器中有一个结构化缓冲区,它应该保存关于几个灯光、位置、方向、颜色等的信息。我已经设法将信息输入到计算着色器中,但值不正确。一个 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 中使用了不正确的大小

向计算着色器发送结构化缓冲区,但它的值不正确

directx-11 hlsl memcpy compute-shader structured-data
© www.soinside.com 2019 - 2024. All rights reserved.