如何在DirectX12中读取子资源数据?

时间:2019-02-23 00:48:08

标签: directx-12

我有一个DDS纹理,该纹理是使用Microsoft CreateDDSTextureFromMemory12帮助程序库中的DDSTextureLoader函数创建的。纹理有10个mipmap。我能够创建纹理并使用它而没有任何问题。

我想做的是在给定的索引下读取特定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 :(得分:0)

最简单的方法是使用github上DirectXTK12项目中的LoadDDSTextureFromMemory。第5个参数返回std::vector中的所有子资源。