132 lines
2.6 KiB
C++
132 lines
2.6 KiB
C++
#pragma once
|
|
|
|
#include <renderer/rhi/rhi_types.h>
|
|
|
|
namespace extra2d {
|
|
|
|
/**
|
|
* @brief RHI 缓冲区接口
|
|
*
|
|
* 抽象 GPU 缓冲区资源
|
|
*/
|
|
class RHIBuffer {
|
|
public:
|
|
virtual ~RHIBuffer() = default;
|
|
|
|
/**
|
|
* @brief 获取缓冲区类型
|
|
* @return 缓冲区类型
|
|
*/
|
|
virtual BufferType getType() const = 0;
|
|
|
|
/**
|
|
* @brief 获取缓冲区大小
|
|
* @return 缓冲区大小(字节)
|
|
*/
|
|
virtual uint32_t getSize() const = 0;
|
|
|
|
/**
|
|
* @brief 更新缓冲区数据
|
|
* @param data 数据源指针
|
|
* @param size 数据大小
|
|
* @param offset 缓冲区偏移(字节)
|
|
* @return 更新是否成功
|
|
*/
|
|
virtual bool update(const void* data, uint32_t size, uint32_t offset = 0) = 0;
|
|
|
|
/**
|
|
* @brief 映射缓冲区到 CPU 内存
|
|
* @return 映射的内存指针,失败返回 nullptr
|
|
*/
|
|
virtual void* map() = 0;
|
|
|
|
/**
|
|
* @brief 解除映射
|
|
*/
|
|
virtual void unmap() = 0;
|
|
|
|
/**
|
|
* @brief 检查是否有效
|
|
* @return 是否有效
|
|
*/
|
|
virtual bool isValid() const = 0;
|
|
};
|
|
|
|
/**
|
|
* @brief RHI 纹理接口
|
|
*
|
|
* 抽象 GPU 纹理资源
|
|
*/
|
|
class RHITexture {
|
|
public:
|
|
virtual ~RHITexture() = default;
|
|
|
|
/**
|
|
* @brief 获取纹理类型
|
|
* @return 纹理类型
|
|
*/
|
|
virtual TextureType getType() const = 0;
|
|
|
|
/**
|
|
* @brief 获取纹理格式
|
|
* @return 纹理格式
|
|
*/
|
|
virtual TextureFormat getFormat() const = 0;
|
|
|
|
/**
|
|
* @brief 获取纹理宽度
|
|
* @return 宽度
|
|
*/
|
|
virtual uint32_t getWidth() const = 0;
|
|
|
|
/**
|
|
* @brief 获取纹理高度
|
|
* @return 高度
|
|
*/
|
|
virtual uint32_t getHeight() const = 0;
|
|
|
|
/**
|
|
* @brief 获取 Mipmap 层级数
|
|
* @return Mipmap 层级数
|
|
*/
|
|
virtual uint32_t getMipLevels() const = 0;
|
|
|
|
/**
|
|
* @brief 更新纹理数据
|
|
* @param data 像素数据
|
|
* @param mipLevel Mipmap 层级
|
|
* @return 更新是否成功
|
|
*/
|
|
virtual bool update(const void* data, uint32_t mipLevel = 0) = 0;
|
|
|
|
/**
|
|
* @brief 生成 Mipmap
|
|
*/
|
|
virtual void generateMipmap() = 0;
|
|
|
|
/**
|
|
* @brief 绑定到指定槽位
|
|
* @param slot 纹理槽位
|
|
*/
|
|
virtual void bind(uint32_t slot) = 0;
|
|
|
|
/**
|
|
* @brief 解绑
|
|
*/
|
|
virtual void unbind() = 0;
|
|
|
|
/**
|
|
* @brief 检查是否有效
|
|
* @return 是否有效
|
|
*/
|
|
virtual bool isValid() const = 0;
|
|
|
|
/**
|
|
* @brief 检查是否可作为渲染目标
|
|
* @return 是否可作为渲染目标
|
|
*/
|
|
virtual bool isRenderTarget() const = 0;
|
|
};
|
|
|
|
} // namespace extra2d
|