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

2.2 KiB
Raw Blame History

ShaderLoader::Load

方法签名

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

类型检测规则:

  • .vertShaderType::Vertex
  • .fragShaderType::Fragment
  • .geomShaderType::Geometry
  • .compShaderType::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 着色器...
}