我有一个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]
答案 0 :(得分:0)
最简单的方法是使用github上DirectXTK12项目中的LoadDDSTextureFromMemory
。第5个参数返回std::vector
中的所有子资源。