4.3 KiB
4.3 KiB
Shader
命名空间: XCEngine::Resources
类型: class
描述: 着色器资源类,管理着色器源码、编译后的二进制和 uniform/attribute 信息。
概述
Shader 是 XCEngine 中的着色器资源类,继承自 IResource。它管理着色器源码、编译后的二进制数据、着色器类型、语言类型、uniform 列表和 attribute 列表,并持有对应的 RHI 着色器资源指针。
头文件
#include <XCEngine/Resources/Shader.h>
枚举类型
ShaderType
着色器类型枚举。
| 值 | 描述 |
|---|---|
Vertex |
顶点着色器 |
Fragment |
片元着色器 |
Geometry |
几何着色器 |
Compute |
计算着色器 |
Hull |
Hull 着色器(曲面细分控制) |
Domain |
Domain 着色器(曲面细分评估) |
ShaderLanguage
着色器语言枚举。
| 值 | 描述 |
|---|---|
GLSL |
OpenGL Shading Language |
HLSL |
High-Level Shading Language |
SPIRV |
SPIR-V 二进制格式 |
结构体
ShaderUniform
Uniform 变量描述。
| 成员 | 类型 | 描述 |
|---|---|---|
name |
Containers::String |
Uniform 名称 |
location |
Core::uint32 |
位置/绑定点 |
size |
Core::uint32 |
大小(字节) |
type |
Core::uint32 |
类型标识 |
ShaderAttribute
顶点属性描述。
| 成员 | 类型 | 描述 |
|---|---|---|
name |
Containers::String |
属性名称 |
location |
Core::uint32 |
位置索引 |
size |
Core::uint32 |
大小(字节) |
type |
Core::uint32 |
类型标识 |
公共方法
基础属性
| 方法 | 描述 |
|---|---|
ResourceType GetType() const |
返回 ResourceType::Shader |
const Containers::String& GetName() const |
获取着色器名称 |
const Containers::String& GetPath() const |
获取着色器路径 |
ResourceGUID GetGUID() const |
获取全局唯一标识符 |
bool IsValid() const |
检查着色器是否有效 |
size_t GetMemorySize() const |
获取内存大小 |
void Release() |
释放着色器引用 |
类型与语言
| 方法 | 描述 |
|---|---|
void SetShaderType(ShaderType type) |
设置着色器类型 |
ShaderType GetShaderType() const |
获取着色器类型 |
void SetShaderLanguage(ShaderLanguage lang) |
设置着色器语言 |
ShaderLanguage GetShaderLanguage() const |
获取着色器语言 |
源码与编译
| 方法 | 描述 |
|---|---|
void SetSourceCode(const Containers::String& source) |
设置源码 |
const Containers::String& GetSourceCode() const |
获取源码 |
void SetCompiledBinary(const Containers::Array<Core::uint8>& binary) |
设置编译后二进制 |
const Containers::Array<Core::uint8>& GetCompiledBinary() const |
获取编译后二进制 |
Uniform 和 Attribute
| 方法 | 描述 |
|---|---|
void AddUniform(const ShaderUniform& uniform) |
添加 Uniform 描述 |
const Containers::Array<ShaderUniform>& GetUniforms() const |
获取 Uniform 列表 |
void AddAttribute(const ShaderAttribute& attribute) |
添加 Attribute 描述 |
const Containers::Array<ShaderAttribute>& GetAttributes() const |
获取 Attribute 列表 |
RHI 资源
| 方法 | 描述 |
|---|---|
class IRHIShader* GetRHIResource() const |
获取 RHI 着色器资源 |
void SetRHIResource(class IRHIShader* resource) |
设置 RHI 着色器资源 |
使用示例
// 加载着色器
ResourceHandle<Shader> vs = ResourceManager::Get().Load<Shader>("shaders/vertex.glsl");
ResourceHandle<Shader> fs = ResourceManager::Get().Load<Shader>("shaders/fragment.glsl");
// 设置类型
vs->SetShaderType(ShaderType::Vertex);
fs->SetShaderType(ShaderType::Fragment);
// 设置语言
vs->SetShaderLanguage(ShaderLanguage::GLSL);
// 设置编译后二进制
vs->SetCompiledBinary(compiledSpirv);
// 添加 Uniform
ShaderUniform uniform;
uniform.name = "modelMatrix";
uniform.location = 0;
uniform.size = sizeof(float) * 16;
uniform.type = 0;
vs->AddUniform(uniform);
// 访问 RHI 资源
RHIShader* rhiShader = vs->GetRHIResource();