#pragma once
#include "D3D12CommonHeader.h"

/**
 * @brief Direct3D 12 核心类
 * @details 定义了 Direct3D 12 核心功能的初始化与关闭函数
 */
namespace XEngine::graphics::d3d12::core{
/**
 * @brief 初始化 Direct3D 12 核心功能
 * @details 调用 DXGI 接口，确定要使用的 GPU 并创建 Direct3D 12 设备
 * @return true 如果初始化成功，否则返回 false
 */
bool initialize();
/**
 * @brief 关闭 Direct3D 12 核心功能
 * @details 调用 Direct3D 12 设备的关闭函数，释放所有资源
 */
void shutdown();
/**
 * @brief 渲染 Direct3D 12 核心功能
 * @details 调用 Direct3D 12 设备的渲染函数，渲染当前渲染表面
 */
void render();


/**
 * @brief 通用资源释放模板函数
 * @details 用于安全释放 DirectX COM 对象，检查空指针后调用 Release 并置空
 * @tparam T COM 接口类型
 */
template<typename T>
constexpr void release(T*& resource)
{
    if(resource)
    {
        resource->Release();
        resource = nullptr;
    }
}

/**
 * @brief 获取 Direct3D 12 设备
 * @details 返回 Direct3D 12 设备的智能指针
 * @return ID3D12Device* Direct3D 12 设备的智能指针
 */
ID3D12Device *const device();

}// namespace XEngine::graphics::d3d12