#pragma once #include #include namespace extra2d { /** * @brief 着色器资源加载器 * * 支持从文件或源码加载着色器资源 */ class ShaderLoader : public AssetLoader { public: /** * @brief 从文件加载着色器 * @param path 单个文件路径(自动推断 .vert/.frag) * @return 着色器指针,失败返回 nullptr */ Ptr load(const std::string& path) override; /** * @brief 从文件加载着色器(指定顶点和片段着色器) * @param vertPath 顶点着色器路径 * @param fragPath 片段着色器路径 * @return 着色器指针,失败返回 nullptr */ Ptr load(const std::string& vertPath, const std::string& fragPath); /** * @brief 从内存加载着色器(不支持) * @param data 数据指针 * @param size 数据大小 * @return nullptr */ Ptr loadFromMemory(const uint8_t* data, size_t size) override; /** * @brief 从源码加载着色器 * @param vsSource 顶点着色器源码 * @param fsSource 片段着色器源码 * @return 着色器指针,失败返回 nullptr */ Ptr loadFromSource(const std::string& vsSource, const std::string& fsSource); /** * @brief 获取支持的文件扩展名 * @return 扩展名列表 */ std::vector getExtensions() const override { return {".glsl", ".vert", ".frag"}; } }; } // namespace extra2d