2

I have a structuredbuffer in a computeshader which is supposed to hold information about several lights, pos, direction, colour, etc. I have managed to get the info into the computeshader, but the values are incorrect. A float4(1.0, 0.0, 0.0, 1.0); should give me the colour red, but for some reason, I get purple when writing to the backbuffer.

Where I bind the information and send it to the 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);

My hypothesis is that my problem is that I use the incorrect size in memcpy

Sent structured buffer to computeshader, but it has incorrect values

Charlie.Q
  • 43
  • 6

1 Answers1

0

Found the problem, it seemed like transposing the matrixes made them larger, and therefore they kinda "leaked" over to the lightcolor. I found that storing the matrixes in Float4X4 stopped this from happening.

        lights[i]->GetViewMatrix(matrix1);
        lights[i]->GetProjMatrix(matrix2);
        
        matrix1 = DirectX::XMMatrixTranspose(matrix1);
        matrix2 = DirectX::XMMatrixTranspose(matrix2);

        DirectX::XMStoreFloat4x4(&viewFloat, matrix1);
        DirectX::XMStoreFloat4x4(&projFloat, matrix2);

        lightTest.lightProj = projFloat;
        lightTest.lightView = viewFloat;
Charlie.Q
  • 43
  • 6