feat(d3d12): 完善描述符堆延迟释放机制与FreeList栈式索引管理
- 添加完整的中文Doxygen注释文档 - 实现process_deferred_release()延迟释放处理 - 添加deferred_release模板函数和current_frame_index() - 实现延迟释放队列和帧索引管理 - 详细说明FreeList栈式索引分配/释放算法 - 更新D3D12学习Wiki,添加延迟释放机制章节
This commit is contained in:
@@ -25,9 +25,11 @@ void render();
|
||||
|
||||
|
||||
/**
|
||||
* @brief 通用资源释放模板函数
|
||||
* @details 用于安全释放 DirectX COM 对象,检查空指针后调用 Release 并置空
|
||||
* @tparam T COM 接口类型
|
||||
* @brief 立即释放 DirectX COM 对象并将指针置空
|
||||
* @details 安全释放资源:若指针非空则调用其 Release() 方法,随后将原指针置为 nullptr。
|
||||
* 适用于所有继承自 IUnknown 的 COM 接口类型。
|
||||
* @tparam T COM 接口类型(如 ID3D12Resource、ID3D11Buffer 等)
|
||||
* @param resource 待释放的 COM 接口指针(引用传递,释放后自动置空)
|
||||
*/
|
||||
template<typename T>
|
||||
constexpr void release(T*& resource)
|
||||
@@ -39,6 +41,32 @@ constexpr void release(T*& resource)
|
||||
}
|
||||
}
|
||||
|
||||
namespace detail {
|
||||
/**
|
||||
* @brief 延迟释放 COM 对象(内部实现)
|
||||
* @details 将资源加入延迟释放队列,不立即调用 Release(),用于异步或帧末统一回收。
|
||||
* @param resource COM 对象指针(按值传递,仅用于记录,不修改外部指针)
|
||||
*/
|
||||
void deferred_release(IUnknown* resource);
|
||||
} // namespace detail
|
||||
|
||||
/**
|
||||
* @brief 安全包装延迟释放,并将外部指针置空
|
||||
* @details 调用 detail::deferred_release 将资源加入延迟释放队列,同时将传入的指针置为 nullptr,
|
||||
* 防止调用者误用悬空指针。适用于需要延迟释放但希望立即清空原指针的场景。
|
||||
* @tparam T COM 接口类型
|
||||
* @param resource 待延迟释放的 COM 接口指针(引用传递,释放后自动置空)
|
||||
*/
|
||||
template<typename T>
|
||||
constexpr void deferred_release(T*& resource)
|
||||
{
|
||||
if(resource)
|
||||
{
|
||||
detail::deferred_release(resource);
|
||||
resource = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 获取 Direct3D 12 设备
|
||||
* @details 返回 Direct3D 12 设备的智能指针
|
||||
@@ -46,4 +74,17 @@ constexpr void release(T*& resource)
|
||||
*/
|
||||
ID3D12Device *const device();
|
||||
|
||||
}// namespace XEngine::graphics::d3d12
|
||||
/**
|
||||
* @brief 获取当前帧索引
|
||||
* @details 返回当前渲染的帧索引
|
||||
* @return u32 当前帧索引
|
||||
*/
|
||||
u32 current_frame_index();
|
||||
|
||||
/**
|
||||
* @brief 设置延迟释放标志
|
||||
* @details 用于在渲染循环中设置延迟释放标志,通知资源管理器在当前帧渲染完成后释放资源
|
||||
*/
|
||||
void set_deferred_release_flag();
|
||||
|
||||
}// namespace XEngine::graphics::d3d12::core
|
||||
Reference in New Issue
Block a user