#pragma once #include #include #include #include #include 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 createBuffer(const BufferDesc& desc); /** * @brief 创建纹理 * @param desc 纹理描述 * @return 纹理对象 */ std::unique_ptr createTexture(const TextureDesc& desc); /** * @brief 创建着色器 * @param desc 着色器描述 * @return 着色器对象 */ std::unique_ptr createShader(const ShaderDesc& desc); /** * @brief 创建图形管线 * @param desc 管线描述 * @return 管线对象 */ std::unique_ptr createPipeline(const PipelineDesc& desc); /** * @brief 创建帧缓冲 * @param desc 帧缓冲描述 * @return 帧缓冲对象 */ std::unique_ptr createFramebuffer(const RenderPassDesc& desc); /** * @brief 创建命令列表 * @return 命令列表对象 */ std::unique_ptr createCommandList(); private: /** * @brief 窗口显示事件回调 - 在窗口显示时创建 OpenGL 上下文 */ void onWindowShow(); private: std::unique_ptr device_; RHIContext* context_; bool initialized_ = false; std::unique_ptr onShowListener_; }; } // namespace extra2d