80 lines
2.7 KiB
Markdown
80 lines
2.7 KiB
Markdown
|
|
# RHIRenderPass
|
|||
|
|
|
|||
|
|
**命名空间**: `XCEngine::RHI`
|
|||
|
|
|
|||
|
|
**类型**: `class (abstract)`
|
|||
|
|
|
|||
|
|
**头文件**: `XCEngine/RHI/RHIRenderPass.h`
|
|||
|
|
|
|||
|
|
**描述**: 渲染通道抽象接口,定义了渲染操作所需的附件配置和加载/存储行为。
|
|||
|
|
|
|||
|
|
## 概述
|
|||
|
|
|
|||
|
|
`RHIRenderPass` 是 RHI 抽象层的渲染通道接口,用于描述渲染操作所需的附件配置。每个渲染通道定义了:
|
|||
|
|
- 颜色附件的数量和格式
|
|||
|
|
- 深度/模板附件(可选)
|
|||
|
|
- 每个附件的加载操作(LoadAction)
|
|||
|
|
- 每个附件的存储操作(StoreAction)
|
|||
|
|
- 清除值(ClearValue)
|
|||
|
|
|
|||
|
|
渲染通道是延迟渲染和多渲染目标(MRT)等高级渲染技术的基础,它允许 GPU 预先知道帧缓冲配置,从而优化内存访问。
|
|||
|
|
|
|||
|
|
## AttachmentDesc 结构体
|
|||
|
|
|
|||
|
|
```cpp
|
|||
|
|
struct AttachmentDesc {
|
|||
|
|
Format format = Format::Unknown;
|
|||
|
|
LoadAction loadOp = LoadAction::Undefined;
|
|||
|
|
StoreAction storeOp = StoreAction::Store;
|
|||
|
|
LoadAction stencilLoadOp = LoadAction::Undefined;
|
|||
|
|
StoreAction stencilStoreOp = StoreAction::Undefined;
|
|||
|
|
ClearValue clearValue;
|
|||
|
|
};
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
| 成员 | 类型 | 描述 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| `format` | `Format` | 附件的像素格式 |
|
|||
|
|
| `loadOp` | `LoadAction` | 渲染前颜色数据的加载操作 |
|
|||
|
|
| `storeOp` | `StoreAction` | 渲染后颜色数据的存储操作 |
|
|||
|
|
| `stencilLoadOp` | `LoadAction` | 渲染前模板数据的加载操作 |
|
|||
|
|
| `stencilStoreOp` | `StoreAction` | 渲染后模板数据的存储操作 |
|
|||
|
|
| `clearValue` | `ClearValue` | 清除颜色值 |
|
|||
|
|
|
|||
|
|
## 公共方法
|
|||
|
|
|
|||
|
|
| 方法 | 描述 |
|
|||
|
|
|------|------|
|
|||
|
|
| [`Initialize`](initialize.md) | 初始化渲染通道 |
|
|||
|
|
| [`Shutdown`](shutdown.md) | 关闭渲染通道 |
|
|||
|
|
| [`GetNativeHandle`](get-native-handle.md) | 获取原生句柄 |
|
|||
|
|
| [`GetColorAttachmentCount`](get-color-attachment-count.md) | 获取颜色附件数量 |
|
|||
|
|
| [`GetColorAttachments`](get-color-attachments.md) | 获取颜色附件描述数组 |
|
|||
|
|
| [`GetDepthStencilAttachment`](get-depth-stencil-attachment.md) | 获取深度模板附件描述 |
|
|||
|
|
|
|||
|
|
## 使用示例
|
|||
|
|
|
|||
|
|
```cpp
|
|||
|
|
#include <XCEngine/RHI/RHIRenderPass.h>
|
|||
|
|
|
|||
|
|
// 配置颜色附件
|
|||
|
|
AttachmentDesc colorAttachments[1];
|
|||
|
|
colorAttachments[0].format = Format::RGBA8_UNORM;
|
|||
|
|
colorAttachments[0].loadOp = LoadAction::Clear;
|
|||
|
|
colorAttachments[0].storeOp = StoreAction::Store;
|
|||
|
|
colorAttachments[0].clearValue.color = { 0.0f, 0.0f, 0.0f, 1.0f };
|
|||
|
|
|
|||
|
|
// 配置深度附件(可选)
|
|||
|
|
AttachmentDesc depthAttachment;
|
|||
|
|
depthAttachment.format = Format::D24_UNORM_S8_UINT;
|
|||
|
|
depthAttachment.loadOp = LoadAction::Clear;
|
|||
|
|
depthAttachment.storeOp = StoreAction::Store;
|
|||
|
|
|
|||
|
|
// 创建渲染通道
|
|||
|
|
RHIRenderPass* renderPass = device->CreateRenderPass(1, colorAttachments, &depthAttachment);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 相关文档
|
|||
|
|
|
|||
|
|
- [RHIFramebuffer](../framebuffer/framebuffer.md) - 帧缓冲接口
|