constantBuffer получить неправильное значение (feat memcopy) - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь реализовать постоянный буфер для массива.

Поэтому я использую макрос MEMCOPY и отображение для записи в постоянный буфер.

Сначала запишите данные в постоянный буфер

    struct TestStruct {
        Vector2 a[10];
        Vector2 b[10];

        TestStruct() {}
    };

    TestStruct* vs = new TestStruct();
    Vector2* a = new Vector2[10];
    Vector2* b = new Vector2[10];
    for (int i = 0; i < 10; ++i)
    {
        a[i] = Vector2(i);
        b[1] = Vector2(i);
    }
    CopyMemory(vs->a, a, sizeof(Vector2)*10);
    CopyMemory(vs->b, b, sizeof(Vector2)*10);

    D3D11_MAPPED_SUBRESOURCE mappedData;
    dContext->Map(buffer.Get(), 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedData);
    CopyMemory(mappedData.pData, data, sizeof(T));
    dContext->Unmap(buffer.Get(), 0);
    dContext->PSSetConstantBuffers(0, 1, buffer.GetAddressOf());

и чтение буфера для проверки данных в нем

    dContext->CopyResource(stagingBuffer.Get(), buffer);
    D3D11_MAPPED_SUBRESOURCE mappedResource;
    ZeroMemory(&mappedResource, sizeof(D3D11_MAPPED_SUBRESOURCE));
    dContext->Map(stagingBuffer.Get(), 0, D3D11_MAP_READ, 0, &mappedResource);
    ZeroMemory(allocatedData, bufferDesc.ByteWidth);
    CopyMemory(allocatedData, mappedResource.pData, bufferDesc.ByteWidth);
    dContext->Unmap(buffer, 0);

данные, которые я могу прочитать из «allocData»:

a[0] = (0,0)
a[1] = (1,1) 
a[2] = (2,2)
a[3] = (3,3) 
a[4] = (4,4) 
a[5] = (5,5) 
a[6] = (6,6) 
a[7] = (7,7) 
a[8] = (8,8) 
a[9] = (9,9) 

b[0] = (0,0)
b[1] = (9,9)
b[2] = (0,0)
b[3] = (0,0)
b[4] = (0,0)
b[5] = (0,0)
b[6] = (0,0)
b[7] = (0,0)
b[8] = (0,0)
b[9] = (0,0)

'a' имеет правильное значение но «б» имеет неправильное значение. Я просто думаю, что могут возникнуть проблемы с использованием memcopy или распределением данных.

...