123 lines
4.4 KiB
Markdown
123 lines
4.4 KiB
Markdown
# RHI (Render Hardware Interface)
|
||
|
||
**命名空间**: `XCEngine::RHI`
|
||
|
||
**类型**: `module`
|
||
|
||
**描述**: RHI 抽象层是 XCEngine 的核心渲染硬件接口模块,提供了对底层图形 API(D3D12、OpenGL 等)的统一抽象。
|
||
|
||
## 概述
|
||
|
||
RHI(Render Hardware Interface)模块是 XCEngine 图形引擎的核心抽象层。它通过定义一组统一的接口和类型,封装了不同图形 API 的差异,使上层代码可以在不关心具体实现的情况下进行渲染。
|
||
|
||
### 架构设计
|
||
|
||
```
|
||
┌─────────────────────────────────────────────┐
|
||
│ 上层渲染代码 │
|
||
│ (Renderer, Scene, Materials, etc.) │
|
||
└─────────────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────────┐
|
||
│ RHI 抽象接口层 │
|
||
│ RHIDevice, RHICommandList, RHIBuffer, ... │
|
||
└─────────────────────────────────────────────┘
|
||
│
|
||
┌───────────┴───────────┐
|
||
▼ ▼
|
||
┌─────────────────────┐ ┌─────────────────────┐
|
||
│ D3D12 后端 │ │ OpenGL 后端 │
|
||
│ D3D12Device, ... │ │ OpenGLDevice, ... │
|
||
└─────────────────────┘ └─────────────────────┘
|
||
```
|
||
|
||
### 核心组件
|
||
|
||
| 组件 | 描述 |
|
||
|------|------|
|
||
| `RHIDevice` | 渲染设备抽象,代表一个图形设备实例 |
|
||
| `RHIFactory` | RHI 设备工厂,用于创建不同后端的设备 |
|
||
| `RHIBuffer` | GPU 缓冲区资源抽象(顶点缓冲、索引缓冲、常量缓冲等) |
|
||
| `RHITexture` | GPU 纹理资源抽象 |
|
||
| `RHICommandList` | GPU 命令列表抽象 |
|
||
| `RHICommandQueue` | GPU 命令队列抽象 |
|
||
| `RHISwapChain` | 交换链抽象,用于窗口渲染 |
|
||
| `RHIFence` | GPU 同步栅栏抽象 |
|
||
| `RHIShader` | 着色器资源抽象 |
|
||
| `RHIPipelineState` | 渲染管线状态抽象 |
|
||
| `RHISampler` | 纹理采样器抽象 |
|
||
|
||
### 设备创建流程
|
||
|
||
```cpp
|
||
// 1. 使用工厂创建设备
|
||
RHIDevice* device = RHIFactory::CreateRHIDevice(RHIType::D3D12);
|
||
|
||
// 2. 初始化设备
|
||
RHIDeviceDesc desc;
|
||
desc.windowHandle = hwnd;
|
||
desc.width = 1280;
|
||
desc.height = 720;
|
||
desc.appName = L"MyApp";
|
||
device->Initialize(desc);
|
||
|
||
// 3. 获取设备能力
|
||
const RHICapabilities& caps = device->GetCapabilities();
|
||
|
||
// 4. 创建资源
|
||
RHIBuffer* vertexBuffer = device->CreateBuffer(bufferDesc);
|
||
RHITexture* texture = device->CreateTexture(textureDesc);
|
||
|
||
// 5. 使用完毕后关闭设备
|
||
device->Shutdown();
|
||
delete device;
|
||
```
|
||
|
||
### 支持的后端
|
||
|
||
| 后端 | 枚举值 | 状态 |
|
||
|------|--------|------|
|
||
| DirectX 12 | `RHIType::D3D12` | ✅ 已实现 |
|
||
| OpenGL | `RHIType::OpenGL` | ✅ 已实现 |
|
||
| Vulkan | `RHIType::Vulkan` | 🔜 预留 |
|
||
| Metal | `RHIType::Metal` | 🔜 预留 |
|
||
|
||
## 模块内容
|
||
|
||
### 核心接口
|
||
|
||
- [RHIDevice](./rhi-device.md) - 渲染设备
|
||
- [RHIFactory](./rhi-factory.md) - 设备工厂
|
||
|
||
### 资源类型
|
||
|
||
- [RHIBuffer](./rhi-buffer.md) - GPU 缓冲区
|
||
- [RHITexture](./rhi-texture.md) - GPU 纹理
|
||
|
||
### 命令执行
|
||
|
||
- [RHICommandList](./rhi-command-list.md) - 命令列表
|
||
- [RHICommandQueue](./rhi-command-queue.md) - 命令队列
|
||
- [RHISwapChain](./rhi-swap-chain.md) - 交换链
|
||
- [RHIFence](./rhi-fence.md) - 同步栅栏
|
||
|
||
### 渲染状态
|
||
|
||
- [RHIShader](./rhi-shader.md) - 着色器
|
||
- [RHIPipelineState](./rhi-pipeline-state.md) - 管线状态
|
||
- [RHISampler](./rhi-sampler.md) - 采样器
|
||
- [RHIDescriptorPool](./rhi-descriptor-pool.md) - 描述符池
|
||
- [RHIPipelineLayout](./rhi-pipeline-layout.md) - 管线布局
|
||
- [RHICapabilities](./rhi-capabilities.md) - 设备能力
|
||
|
||
### 类型定义
|
||
|
||
- [RHIEnums](./rhi-enums.md) - 枚举类型汇总
|
||
- [RHITypes](./rhi-types.md) - 结构体类型汇总
|
||
|
||
## 相关文档
|
||
|
||
- [D3D12 后端](./d3d12/d3d12-overview.md)
|
||
- [OpenGL 后端](./opengl/opengl-overview.md)
|