Files
XCEngine/docs/api/resources/shader-loader/methods/load.md

75 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ShaderLoader::Load
## 方法签名
```cpp
LoadResult Load(const Containers::String& path, const ImportSettings* settings = nullptr) override;
```
## 详细描述
加载指定路径的着色器资源文件。加载过程包括:
1. 读取文件数据
2. 将二进制数据转换为字符串形式的着色器源代码
3. 创建 `Shader` 对象并设置基本信息路径、名称、GUID
4. 根据文件扩展名检测着色器语言HLSL 或 GLSL
5. 根据文件扩展名检测着色器类型(顶点、片段、几何、计算)
6. 设置着色器源代码和有效性标志
7. 计算并设置资源的内存占用
**语言检测规则:**
- `.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` 指针或错误信息
## 示例
```cpp
#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 着色器...
}
```