Files
XCEngine/docs/api/rhi/shader/shader.md
2026-03-20 02:35:45 +08:00

96 lines
2.9 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.
# RHIShader
**命名空间**: `XCEngine::RHI`
**类型**: `class` (abstract)
**头文件**: `XCEngine/RHI/RHIShader.h`
**描述**: 着色器接口,管理 GPU 着色器程序
## 概述
`RHIShader` 是 XCEngine RHI 模块中的抽象着色器接口类,定义了 GPU 着色器程序的标准 API。该类是所有具体着色器实现如 D3D12Shader、VulkanShader 等)的基类,提供了统一的着色器编译、绑定和参数设置接口。
设计目的:
- 提供跨平台的着色器抽象
- 统一着色器资源管理和绑定流程
- 简化渲染管线中着色器的使用
## 公共方法
| 方法 | 描述 |
|------|------|
| [`CompileFromFile`](compile-from-file.md) | 从文件编译着色器 |
| [`Compile`](compile.md) | 从内存数据编译着色器 |
| [`GetType`](get-type.md) | 获取着色器类型 |
| [`IsValid`](is-valid.md) | 检查着色器是否有效 |
| [`Bind`](bind.md) | 绑定着色器到渲染管线 |
| [`Unbind`](unbind.md) | 解绑着色器 |
| [`GetNativeHandle`](get-native-handle.md) | 获取原生句柄 |
| [`SetInt`](set-int.md) | 设置整数 uniform |
| [`SetFloat`](set-float.md) | 设置浮点数 uniform |
| [`SetVec3`](set-vec3.md) | 设置三维向量 uniform |
| [`SetVec4`](set-vec4.md) | 设置四维向量 uniform |
| [`SetMat4`](set-mat4.md) | 设置 4x4 矩阵 uniform |
| [`Shutdown`](shutdown.md) | 释放着色器资源 |
## 公共属性
| 属性 | 类型 | 描述 |
|------|------|------|
| `ShaderType` | `enum` | 着色器类型枚举 |
### ShaderType 枚举值
| 枚举值 | 描述 |
|--------|------|
| `ShaderType::Vertex` | 顶点着色器 |
| `ShaderType::Fragment` | 片元着色器 |
| `ShaderType::Geometry` | 几何着色器 |
| `ShaderType::Compute` | 计算着色器 |
| `ShaderType::TessControl` | 曲面细分控制着色器 |
| `ShaderType::TessEvaluation` | 曲面细分评估着色器 |
| `ShaderType::Hull` | Hull 着色器 (D3D12) |
| `ShaderType::Domain` | Domain 着色器 (D3D12) |
| `ShaderType::Amplification` | 放大着色器 (Mesh Shader) |
| `ShaderType::Mesh` | Mesh 着色器 |
| `ShaderType::Library` | 着色器库 |
## 使用示例
```cpp
#include "XCEngine/RHI/RHIShader.h"
#include "XCEngine/RHI/RHIDevice.h"
using namespace XCEngine::RHI;
// 通过 RHIDevice 编译着色器
ShaderCompileDesc vsDesc;
vsDesc.fileName = L"shaders/vertex.cso";
vsDesc.entryPoint = "VSMain";
vsDesc.profile = "vs_5_0";
RHIShader* vertexShader = device->CompileShader(vsDesc);
if (vertexShader && vertexShader->IsValid()) {
vertexShader->Bind();
// 设置 uniform 参数
float modelMatrix[16] = { /* 4x4 模型矩阵数据 */ };
vertexShader->SetMat4("u_modelMatrix", modelMatrix);
// 渲染...
vertexShader->Unbind();
}
if (vertexShader) {
vertexShader->Shutdown();
delete vertexShader;
}
```
## 相关文档
- [RHI 模块总览](../rhi.md) - RHI 模块总览
- [RHIDevice](../device/device.md) - 创建设备