#pragma once #include #include #include #include #include // 前向声明 OpenGL 类型 typedef unsigned int GLuint; namespace extra2d { /** * @brief 纹理类 * * 管理 OpenGL 纹理的创建、加载和绑定 * 支持从文件或内存加载 */ class Texture : public RefCounted { public: /** * @brief 默认构造函数 */ Texture(); /** * @brief 析构函数 */ ~Texture() override; /** * @brief 从文件加载纹理 * @param path 文件路径 * @return 加载是否成功 */ bool loadFromFile(const std::string& path); /** * @brief 从内存加载纹理 * @param data 像素数据 * @param width 宽度 * @param height 高度 * @param format 像素格式 * @return 加载是否成功 */ bool loadFromMemory(const uint8_t* data, int width, int height, TextureFormat format); /** * @brief 创建空纹理 * @param width 宽度 * @param height 高度 * @param format 像素格式 * @return 创建是否成功 */ bool create(int width, int height, TextureFormat format); /** * @brief 绑定纹理到指定槽位 * @param slot 纹理槽位 */ void bind(uint32_t slot = 0) const; /** * @brief 解绑纹理 */ void unbind() const; /** * @brief 获取纹理宽度 * @return 宽度 */ int getWidth() const { return width_; } /** * @brief 获取纹理高度 * @return 高度 */ int getHeight() const { return height_; } /** * @brief 获取纹理格式 * @return 像素格式 */ TextureFormat getFormat() const { return format_; } /** * @brief 获取 OpenGL 纹理对象 * @return OpenGL 纹理对象 */ GLuint getHandle() const { return texture_; } /** * @brief 检查是否已加载 * @return 是否已加载 */ bool isLoaded() const { return texture_ != 0; } private: GLuint texture_ = 0; // OpenGL 纹理对象 int width_ = 0; // 纹理宽度 int height_ = 0; // 纹理高度 TextureFormat format_ = TextureFormat::RGBA8; // 像素格式 }; } // namespace extra2d