Extra2D/include/renderer/rhi/rhi_device.h

170 lines
3.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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