114 lines
2.5 KiB
C
114 lines
2.5 KiB
C
|
|
#pragma once
|
|||
|
|
|
|||
|
|
#include <event/events.h>
|
|||
|
|
#include <module/module.h>
|
|||
|
|
#include <module/module_registry.h>
|
|||
|
|
#include <renderer/rhi/rhi.h>
|
|||
|
|
#include <memory>
|
|||
|
|
|
|||
|
|
namespace extra2d {
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief RHI 模块
|
|||
|
|
*
|
|||
|
|
* 负责初始化和管理 RHI 后端,提供图形 API 抽象
|
|||
|
|
* 优先级:1(在 WindowModule 之后初始化)
|
|||
|
|
*/
|
|||
|
|
class RHIModule : public Module {
|
|||
|
|
E2D_REGISTER_MODULE(RHIModule, "RHI", 1)
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
RHIModule();
|
|||
|
|
~RHIModule() override;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 初始化 RHI 模块
|
|||
|
|
* @return 初始化是否成功
|
|||
|
|
*/
|
|||
|
|
bool init() override;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 关闭 RHI 模块
|
|||
|
|
*/
|
|||
|
|
void shutdown() override;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 获取 RHI 设备
|
|||
|
|
* @return RHI 设备指针
|
|||
|
|
*/
|
|||
|
|
RHIDevice* getDevice() const { return device_.get(); }
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 获取 RHI 上下文
|
|||
|
|
* @return RHI 上下文指针
|
|||
|
|
*/
|
|||
|
|
RHIContext* getContext() const { return context_; }
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 获取全局 RHIModule 实例
|
|||
|
|
* @return RHIModule 指针
|
|||
|
|
*/
|
|||
|
|
static RHIModule* get();
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 检查 RHI 是否已初始化
|
|||
|
|
* @return 是否已初始化
|
|||
|
|
*/
|
|||
|
|
bool isInitialized() const { return initialized_; }
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 创建缓冲区
|
|||
|
|
* @param desc 缓冲区描述
|
|||
|
|
* @return 缓冲区对象
|
|||
|
|
*/
|
|||
|
|
std::unique_ptr<RHIBuffer> createBuffer(const BufferDesc& desc);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 创建纹理
|
|||
|
|
* @param desc 纹理描述
|
|||
|
|
* @return 纹理对象
|
|||
|
|
*/
|
|||
|
|
std::unique_ptr<RHITexture> createTexture(const TextureDesc& desc);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 创建着色器
|
|||
|
|
* @param desc 着色器描述
|
|||
|
|
* @return 着色器对象
|
|||
|
|
*/
|
|||
|
|
std::unique_ptr<RHIShader> createShader(const ShaderDesc& desc);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 创建图形管线
|
|||
|
|
* @param desc 管线描述
|
|||
|
|
* @return 管线对象
|
|||
|
|
*/
|
|||
|
|
std::unique_ptr<RHIPipeline> createPipeline(const PipelineDesc& desc);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 创建帧缓冲
|
|||
|
|
* @param desc 帧缓冲描述
|
|||
|
|
* @return 帧缓冲对象
|
|||
|
|
*/
|
|||
|
|
std::unique_ptr<RHIFramebuffer> createFramebuffer(const RenderPassDesc& desc);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 创建命令列表
|
|||
|
|
* @return 命令列表对象
|
|||
|
|
*/
|
|||
|
|
std::unique_ptr<RHICommandList> createCommandList();
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
/**
|
|||
|
|
* @brief 窗口显示事件回调 - 在窗口显示时创建 OpenGL 上下文
|
|||
|
|
*/
|
|||
|
|
void onWindowShow();
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
std::unique_ptr<RHIDevice> device_;
|
|||
|
|
RHIContext* context_;
|
|||
|
|
bool initialized_ = false;
|
|||
|
|
std::unique_ptr<events::OnShow::Listener> onShowListener_;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
} // namespace extra2d
|