2.2 KiB
2.2 KiB
ShaderLoader::Load
方法签名
LoadResult Load(const Containers::String& path, const ImportSettings* settings = nullptr) override;
详细描述
加载指定路径的着色器资源文件。加载过程包括:
- 读取文件数据
- 将二进制数据转换为字符串形式的着色器源代码
- 创建
Shader对象并设置基本信息(路径、名称、GUID) - 根据文件扩展名检测着色器语言(HLSL 或 GLSL)
- 根据文件扩展名检测着色器类型(顶点、片段、几何、计算)
- 设置着色器源代码和有效性标志
- 计算并设置资源的内存占用
语言检测规则:
.hlsl扩展名 →ShaderLanguage::HLSL- 其他扩展名 →
ShaderLanguage::GLSL
类型检测规则:
.vert→ShaderType::Vertex.frag→ShaderType::Fragment.geom→ShaderType::Geometry.comp→ShaderType::Compute- 其他扩展名 →
ShaderType::Fragment(默认)
参数
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| path | const Containers::String& |
- | 着色器文件路径 |
| settings | const ImportSettings* |
nullptr |
导入设置(当前未使用) |
返回值
LoadResult - 加载结果对象,包含成功加载的 Shader 指针或错误信息
示例
#include "Resources/ShaderLoader.h"
using namespace XCEngine::Resources;
ShaderLoader loader;
// 加载顶点着色器
LoadResult vertResult = loader.Load("assets/shaders/pbr.vert");
if (vertResult.IsSuccess()) {
Shader* vertShader = static_cast<Shader*>(vertResult.GetResource());
printf("Loaded vertex shader: %s\n", vertShader->m_name.CStr());
}
// 加载片段着色器
LoadResult fragResult = loader.Load("assets/shaders/pbr.frag");
if (fragResult.IsSuccess()) {
Shader* fragShader = static_cast<Shader*>(fragResult.GetResource());
printf("Loaded fragment shader: %s\n", fragShader->m_name.CStr());
} else {
printf("Failed to load fragment shader: %s\n", fragResult.GetError().CStr());
}
// 加载 HLSL 着色器
LoadResult hlslResult = loader.Load("assets/shaders/vertex.hlsl");
if (hlslResult.IsSuccess()) {
Shader* hlslShader = static_cast<Shader*>(hlslResult.GetResource());
// HLSL 着色器...
}