refactor(RHI): remove void* from CommandList interfaces and fix OpenGL MRT bug
- Remove void* parameters from RHICommandList abstract interface - TransitionBarrier, SetVertexBuffer, SetIndexBuffer, SetRenderTargets, ClearRenderTarget, ClearDepthStencil, CopyResource now use RHIResourceView* - SetPipelineState now uses RHIPipelineState* instead of void* - Simplified SetVertexBuffer to 3 params, SetIndexBuffer to 2 params - Add internal D3D12 APIs for native type support (low-level escape hatch) - Fix OpenGL SetRenderTargets to call glDrawBuffers for MRT support - Update tests to match new interface signatures All 289 RHI tests pass (158 unit + 64 OpenGL backend + 58 D3D12 backend + 8 integration + 1 disabled)
This commit is contained in:
@@ -1,23 +1,14 @@
|
||||
# RHI 渲染模块设计文档
|
||||
## 1. 项目背景
|
||||
本项目旨在参考 Unity 渲染架构,为已有的 **OpenGL** 、**Direct3D 12** 和 **Vulkan** 图形 API 后端设计统一的**渲染硬件抽象层(RHI)**,屏蔽 API 差异,实现引擎上层逻辑与底层图形 API 的解耦。
|
||||
本项目旨在参考 Unity 渲染架构,为已有的 **OpenGL** 、**Direct3D 12** 和 **Vulkan** 图形 API 后端设计统一的**渲染硬件抽象层(RHI)**,屏蔽 API 差异,实现引擎上层逻辑与底层图形 API 的解耦。需要注意的是,该模块的抽象层主要面向**Direct3D 12** 和 **Vulkan**这些高级图形API的显示设计。
|
||||
|
||||
## 2. 核心设计理念
|
||||
### 2.1 总体原则
|
||||
**求同存异,分层抽象,特性降级,底层逃逸**
|
||||
- **求同存异**:优先提取 API 共性作为核心抽象,差异部分通过模拟/降级处理
|
||||
- **分层抽象**:通过清晰的层级结构隔离 API 差异
|
||||
- **特性降级**:对高级特性提供能力检测和替代方案
|
||||
- **底层逃逸**:允许直接访问原生 API 以满足极端需求
|
||||
|
||||
### 2.2 差异分类与处理策略
|
||||
| 差异类型 | 典型示例 | 处理方案 |
|
||||
|----------|----------|----------|
|
||||
| 概念命名不同但本质相似 | D3D12 `CommandList` ≈ OpenGL 状态机绘制 | 直接统一抽象 |
|
||||
| 显式控制 vs 隐式管理 | D3D12 `DescriptorHeap` vs OpenGL 纹理单元 | 提供"自动模式"+"显式模式" |
|
||||
| API 独有高级特性 | D3D12 光线追踪、网格着色器 | 特性检测 + 降级方案 + 底层逃逸 |
|
||||
|
||||
|
||||
## 3. RHI 分层架构
|
||||
### 3.1 通用分层模型
|
||||
```
|
||||
@@ -33,7 +24,6 @@
|
||||
│ 驱动/硬件层 │
|
||||
└─────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 3.2 层级职责说明
|
||||
1. **引擎功能层**:提供场景管理、材质系统、光照等高级功能接口
|
||||
2. **渲染管线层**:定义渲染流程(前向/延迟渲染)
|
||||
@@ -41,7 +31,6 @@
|
||||
4. **API 后端层**:针对具体 API 的实现
|
||||
5. **驱动/硬件层**:最终执行渲染指令
|
||||
|
||||
|
||||
## 4. RHI 抽象基类设计
|
||||
include/XCEngine/RHI/
|
||||
├── RHIEnums.h # 通用枚举
|
||||
@@ -58,6 +47,4 @@ include/XCEngine/RHI/
|
||||
├── RHISwapChain.h # 交换链抽象
|
||||
├── RHIFence.h # 同步栅栏抽象
|
||||
├── RHIDescriptorPool.h # 描述符池抽象
|
||||
└── RHIFactory.h # RHI 工厂类
|
||||
|
||||
|
||||
└── RHIFactory.h # RHI 工厂类
|
||||
Reference in New Issue
Block a user