feat(d3d12): 新增纹理资源类,修复 Surface 重复释放问题
核心变更: - 新增 d3d12_texture 和 d3d12_render_texture 类 - 新增 d3d12_texture_init_info 结构,支持三种资源创建方式 - 新增 D3D12Helpers.h,提供堆属性辅助结构 - 改用 utl::free_list 管理 surface,解决重复释放问题 - 为 d3d12_surface 添加移动语义,支持撕裂检测 文档完善: - 为 FreeList.h 和 Vector.h 添加完整 Doxygen 中文注释 - 更新 D3D12 学习 Wiki,添加 SRV、资源创建方式、纹理资源类章节 - 新增变更记录文档
This commit is contained in:
@@ -417,4 +417,64 @@ private:
|
||||
const D3D12_DESCRIPTOR_HEAP_TYPE _type;
|
||||
};
|
||||
|
||||
struct d3d12_texture_init_info
|
||||
{
|
||||
ID3D12Heap1* heap{nullptr};
|
||||
ID3D12Resource* resource{nullptr};
|
||||
D3D12_SHADER_RESOURCE_VIEW_DESC* srv_desc{nullptr};
|
||||
D3D12_RESOURCE_DESC* desc{nullptr};
|
||||
D3D12_RESOURCE_ALLOCATION_INFO1 allocation_info{};
|
||||
D3D12_RESOURCE_STATES initial_state{};
|
||||
D3D12_CLEAR_VALUE clear_value{};
|
||||
};
|
||||
|
||||
|
||||
class d3d12_texture
|
||||
{
|
||||
public:
|
||||
constexpr static u32 max_mips{ 14 };
|
||||
d3d12_texture() = default;
|
||||
explicit d3d12_texture(d3d12_texture_init_info info);
|
||||
DISABLE_COPY(d3d12_texture);
|
||||
constexpr d3d12_texture(d3d12_texture&& o)
|
||||
: _resource(o._resource), _srv(o._srv) //这些值只是指针和句柄,不需要move
|
||||
{
|
||||
o.reset();
|
||||
}
|
||||
|
||||
constexpr d3d12_texture& operator=(d3d12_texture&& o)
|
||||
{
|
||||
assert(this != &o);
|
||||
if(this != &o)
|
||||
{
|
||||
release();
|
||||
move(o);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
void release();
|
||||
constexpr ID3D12Resource *const resource() const { return _resource; }
|
||||
constexpr descriptor_handle srv() const { return _srv; }
|
||||
|
||||
private:
|
||||
constexpr void move(d3d12_texture& o)
|
||||
{
|
||||
_resource = o._resource;
|
||||
_srv = o._srv;
|
||||
o.reset();
|
||||
}
|
||||
|
||||
constexpr void reset()
|
||||
{
|
||||
_resource = nullptr;
|
||||
_srv = {};
|
||||
}
|
||||
|
||||
ID3D12Resource* _resource{nullptr};
|
||||
descriptor_handle _srv;
|
||||
};
|
||||
|
||||
|
||||
|
||||
} // namespace XEngine::graphics::d3d12
|
||||
|
||||
Reference in New Issue
Block a user