#pragma once #include 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