# 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(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(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(hlslResult.GetResource()); // HLSL 着色器... } ```