Extra2D/include/renderer/rhi/rhi_buffer.h

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