Как читать данные подресурсов в DirectX12? - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть текстура DDS, которую я создаю, используя функцию CreateDDSTextureFromMemory12 из вспомогательной библиотеки DDSTextureLoader от Microsoft.Текстура имеет 10 мипмапов.Я могу создать текстуру и использовать ее без каких-либо проблем.

То, что я хотел бы сделать, это прочитать данные текстуры для конкретного mipmap с заданным индексом.

Здесь я пытаюсьдля чтения данных по индексу подресурса 5:

DirectX::CreateDDSTextureFromMemory12(
    g_device,
    g_cmd_list,
    &bytes.front(),
    file_size,
    texResource,
    tmpUploadHeap);

void* pData = nullptr;
texResource->ReadFromSubresource(pData, 64, 1, 5, nullptr);

Однако я получаю следующую ошибку:

D3D12 ERROR: ID3D12Resource1::ID3D12Resource::ReadFromSubresource: 
ReadFromSubresource can not be called on a resource associated with a heap that has the CPU page properties of D3D12_CPU_PAGE_PROPERTY_NOT_AVAILABLE. 
Heaps of the type D3D12_HEAP_TYPE_DEFAULT should be assumed to have these properties. 
[ RESOURCE_MANIPULATION ERROR #895: READFROMSUBRESOURCE_INVALIDRESOURCE]

1 Ответ

0 голосов
/ 28 февраля 2019

Самый простой способ - использовать LoadDDSTextureFromMemory из проекта DirectXTK12 на github.Пятый параметр возвращает все подресурсы в std::vector.

...