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