Files
XCEngine/docs/api/rhi/rhi.md

143 lines
6.3 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.
# RHI 模块
**命名空间**: `XCEngine::RHI`
**描述**: RHI (Rendering Hardware Interface) 是 XCEngine 的硬件抽象层,提供统一的图形 API 接口,支持多个后端实现。
**头文件**: `XCEngine/RHI/RHI.h`
## 概述
RHI 模块将上层渲染逻辑与底层图形 API 解耦,通过抽象接口层提供对 DirectX 12、OpenGL 等图形 API 的统一访问。这种设计使得渲染代码可以在不同的图形 API 之间无缝切换,无需修改上层业务逻辑。
## 架构
```
┌─────────────────────────────────────────────────────────┐
│ 上层渲染代码 │
├─────────────────────────────────────────────────────────┤
│ RHI 抽象接口层 │
│ (RHIDevice, RHIBuffer, RHITexture, RHICommandList...) │
├───────────────┬─────────────────┬───────────────────────┤
│ D3D12 后端 │ OpenGL 后端 │ Vulkan 后端 │
│ (D3D12Device) │ (OpenGLDevice) │ (预留) │
├───────────────┴─────────────────┴───────────────────────┤
│ 原生图形 API (DirectX 12 / OpenGL) │
└─────────────────────────────────────────────────────────┘
```
## 后端类型
| 后端 | 枚举值 | 描述 |
|------|--------|------|
| DirectX 12 | `RHIType::D3D12` | DirectX 12 实现,现代 PC 游戏首选 |
| OpenGL | `RHIType::OpenGL` | OpenGL Core Profile 实现,跨平台兼容 |
## 抽象类
### 核心设备
| 类 | 文档 | 描述 |
|----|------|------|
| [RHIDevice](device/device.md) | `RHIDevice.h` | 渲染设备抽象,代表图形适配器实例 |
| [RHIFactory](rhifactory/rhifactory.md) | `RHIFactory.h` | 设备工厂,用于创建不同后端的设备实例 |
### 资源管理
| 类 | 文档 | 描述 |
|----|------|------|
| [RHIBuffer](buffer/buffer.md) | `RHIBuffer.h` | GPU 缓冲区资源,存储顶点、索引、常量等数据 |
| [RHITexture](texture/texture.md) | `RHITexture.h` | GPU 纹理资源,存储 1D/2D/3D 图像数据 |
| [RHIShader](shader/shader.md) | `RHIShader.h` | 着色器资源,管理顶点、像素等着色器程序 |
### 命令执行
| 类 | 文档 | 描述 |
|----|------|------|
| [RHICommandList](command-list/command-list.md) | `RHICommandList.h` | 命令列表,记录 GPU 命令 |
| [RHICommandQueue](command-queue/command-queue.md) | `RHICommandQueue.h` | 命令队列,提交和执行命令列表 |
| [RHISwapChain](swap-chain/swap-chain.md) | `RHISwapChain.h` | 交换链,管理帧缓冲区和显示输出 |
### 同步与状态
| 类 | 文档 | 描述 |
|----|------|------|
| [RHIFence](rhi-fence/fence.md) | `RHIFence.h` | 同步栅栏CPU/GPU 同步原语 |
| [RHIPipelineState](pipeline-state/pipeline-state.md) | `RHIPipelineState.h` | 管线状态对象,封装渲染管线配置 |
| [RHISampler](sampler/sampler.md) | `RHISampler.h` | 纹理采样器,配置纹理过滤和寻址模式 |
| [RHIPipelineLayout](pipeline-layout/pipeline-layout.md) | `RHIPipelineLayout.h` | 管线布局,定义着色器资源绑定布局 |
| [RHIDescriptorPool](descriptor-pool/descriptor-pool.md) | `RHIDescriptorPool.h` | 描述符池,管理 GPU 描述符分配 |
### 类型与能力
| 类 | 文档 | 描述 |
|----|------|------|
| [RHICapabilities](capabilities/capabilities.md) | `RHICapabilities.h` | 设备能力结构,描述支持的图形特性 |
| [RHITypes](types/types.md) | `RHITypes.h` | 类型定义,包含所有结构体描述符 |
| [RHIEnums](enums/enums.md) | `RHIEnums.h` | 枚举定义,包含所有枚举类型 |
## 使用流程
```cpp
#include <XCEngine/RHI/RHIFactory.h>
#include <XCEngine/RHI/RHIDevice.h>
using namespace XCEngine::RHI;
// 1. 创建设备
RHIDevice* device = RHIFactory::CreateRHIDevice(RHIType::D3D12);
// 2. 初始化设备
RHIDeviceDesc desc;
desc.windowHandle = hwnd;
desc.width = 1280;
desc.height = 720;
device->Initialize(desc);
// 3. 创建资源
RHIBuffer* vertexBuffer = device->CreateBuffer(bufferDesc);
RHITexture* texture = device->CreateTexture(textureDesc);
// 4. 创建命令列表并录制
RHICommandList* cmdList = device->CreateCommandList(cmdListDesc);
RHICommandQueue* cmdQueue = device->CreateCommandQueue(queueDesc);
// 5. 渲染循环
while (!swapChain->ShouldClose()) {
cmdQueue->ExecuteCommandLists(1, (void**)&cmdList);
swapChain->Present();
}
// 6. 清理
device->Shutdown();
delete device;
```
## 后端文档
- [D3D12 后端](d3d12/d3d12.md) - DirectX 12 实现详情
- [OpenGL 后端](opengl/opengl.md) - OpenGL 实现详情
### D3D12 实现
| 类 | 文档 | 描述 |
|----|------|------|
| [D3D12RenderTargetView](d3d12/render-target-view/render-target-view.md) | `D3D12RenderTargetView.h` | DirectX 12 渲染目标视图实现 |
| [D3D12Shader](d3d12shader/d3d12shader.md) | `D3D12Shader.h` | DirectX 12 着色器资源实现 |
| [D3D12Texture](d3d12texture/d3d12texture.md) | `D3D12Texture.h` | DirectX 12 纹理资源实现 |
| [D3D12SwapChain](d3d12swapchain/d3d12swapchain.md) | `D3D12SwapChain.h` | DirectX 12 交换链实现 |
| [D3D12UnorderedAccessView](d3d12unorderedaccessview/d3d12unorderedaccessview.md) | `D3D12UnorderedAccessView.h` | DirectX 12 无序访问视图实现 |
| [D3D12Screenshot](d3d12screenshot/d3d12screenshot.md) | `D3D12Screenshot.h` | DirectX 12 渲染目标截图工具 |
| [D3D12Enum](d3d12enum/d3d12enum.md) | `D3D12Enum.h` | DirectX 12 枚举类型转换函数 |
### OpenGL 实现
| 类 | 文档 | 描述 |
|----|------|------|
| [OpenGLBuffer](openglbuffer/openglbuffer.md) | `OpenGLBuffer.h` | OpenGL 缓冲区资源实现 |
| [OpenGLRenderTargetView](openglrendertargetview/openglrendertargetview.md) | `OpenGLRenderTargetView.h` | OpenGL 渲染目标视图实现 |
## 相关文档
- [RHI 模块源码](../../engine/include/XCEngine/RHI/) - 源代码位置