Я пытаюсь реализовать постоянный буфер для массива.
Поэтому я использую макрос 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 или распределением данных.