170 lines
3.6 KiB
C++
170 lines
3.6 KiB
C++
#pragma once
|
||
|
||
#include <memory>
|
||
#include <renderer/rhi/rhi_types.h>
|
||
|
||
namespace extra2d {
|
||
|
||
/**
|
||
* @brief RHI 设备接口
|
||
*
|
||
* 抽象图形设备,负责资源创建和上下文管理
|
||
*/
|
||
class RHIDevice {
|
||
public:
|
||
virtual ~RHIDevice() = default;
|
||
|
||
/**
|
||
* @brief 初始化设备
|
||
* @param nativeWindow 原生窗口句柄(如 SDL_Window*)
|
||
* @return 初始化是否成功
|
||
*/
|
||
virtual bool initialize(void* nativeWindow) = 0;
|
||
|
||
/**
|
||
* @brief 关闭设备
|
||
*/
|
||
virtual void shutdown() = 0;
|
||
|
||
//===========================================================================
|
||
// 资源创建
|
||
//===========================================================================
|
||
|
||
/**
|
||
* @brief 创建缓冲区
|
||
* @param desc 缓冲区描述
|
||
* @return 缓冲区对象
|
||
*/
|
||
virtual std::unique_ptr<RHIBuffer> createBuffer(const BufferDesc &desc) = 0;
|
||
|
||
/**
|
||
* @brief 创建纹理
|
||
* @param desc 纹理描述
|
||
* @return 纹理对象
|
||
*/
|
||
virtual std::unique_ptr<RHITexture>
|
||
createTexture(const TextureDesc &desc) = 0;
|
||
|
||
/**
|
||
* @brief 创建着色器
|
||
* @param desc 着色器描述
|
||
* @return 着色器对象
|
||
*/
|
||
virtual std::unique_ptr<RHIShader> createShader(const ShaderDesc &desc) = 0;
|
||
|
||
/**
|
||
* @brief 创建图形管线
|
||
* @param desc 管线描述
|
||
* @return 管线对象
|
||
*/
|
||
virtual std::unique_ptr<RHIPipeline>
|
||
createPipeline(const PipelineDesc &desc) = 0;
|
||
|
||
/**
|
||
* @brief 创建帧缓冲
|
||
* @param desc 帧缓冲描述
|
||
* @return 帧缓冲对象
|
||
*/
|
||
virtual std::unique_ptr<RHIFramebuffer>
|
||
createFramebuffer(const RenderPassDesc &desc) = 0;
|
||
|
||
/**
|
||
* @brief 创建命令列表
|
||
* @return 命令列表对象
|
||
*/
|
||
virtual std::unique_ptr<RHICommandList> createCommandList() = 0;
|
||
|
||
//===========================================================================
|
||
// 上下文管理
|
||
//===========================================================================
|
||
|
||
/**
|
||
* @brief 获取渲染上下文
|
||
* @return 渲染上下文指针
|
||
*/
|
||
virtual RHIContext *getContext() = 0;
|
||
|
||
/**
|
||
* @brief 获取后端名称
|
||
* @return 后端名称(如 "OpenGL", "Vulkan")
|
||
*/
|
||
virtual const char *getBackendName() const = 0;
|
||
|
||
/**
|
||
* @brief 等待 GPU 完成所有操作
|
||
*/
|
||
virtual void waitIdle() = 0;
|
||
|
||
/**
|
||
* @brief 获取渲染统计
|
||
* @return 渲染统计信息
|
||
*/
|
||
virtual const RenderStats &getStats() const = 0;
|
||
|
||
/**
|
||
* @brief 重置渲染统计
|
||
*/
|
||
virtual void resetStats() = 0;
|
||
};
|
||
|
||
/**
|
||
* @brief RHI 上下文接口
|
||
*
|
||
* 管理渲染上下文和呈现
|
||
*/
|
||
class RHIContext {
|
||
public:
|
||
virtual ~RHIContext() = default;
|
||
|
||
/**
|
||
* @brief 初始化上下文
|
||
* @return 初始化是否成功
|
||
*/
|
||
virtual bool initialize() = 0;
|
||
|
||
/**
|
||
* @brief 关闭上下文
|
||
*/
|
||
virtual void shutdown() = 0;
|
||
|
||
/**
|
||
* @brief 开始一帧
|
||
*/
|
||
virtual void beginFrame() = 0;
|
||
|
||
/**
|
||
* @brief 结束一帧并呈现
|
||
*/
|
||
virtual void endFrame() = 0;
|
||
|
||
/**
|
||
* @brief 设置视口
|
||
* @param x 视口 X 坐标
|
||
* @param y 视口 Y 坐标
|
||
* @param width 视口宽度
|
||
* @param height 视口高度
|
||
*/
|
||
virtual void setViewport(int32_t x, int32_t y, uint32_t width,
|
||
uint32_t height) = 0;
|
||
|
||
/**
|
||
* @brief 设置默认帧缓冲
|
||
*/
|
||
virtual void bindDefaultFramebuffer() = 0;
|
||
|
||
/**
|
||
* @brief 获取默认帧缓冲
|
||
* @return 默认帧缓冲
|
||
*/
|
||
virtual RHIFramebuffer *getDefaultFramebuffer() = 0;
|
||
|
||
/**
|
||
* @brief 检查是否支持特性
|
||
* @param feature 特性名称
|
||
* @return 是否支持
|
||
*/
|
||
virtual bool isFeatureSupported(const char *feature) const = 0;
|
||
};
|
||
|
||
} // namespace extra2d
|