6.3 KiB
6.3 KiB
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 | RHIDevice.h |
渲染设备抽象,代表图形适配器实例 |
| RHIFactory | RHIFactory.h |
设备工厂,用于创建不同后端的设备实例 |
资源管理
| 类 | 文档 | 描述 |
|---|---|---|
| RHIBuffer | RHIBuffer.h |
GPU 缓冲区资源,存储顶点、索引、常量等数据 |
| RHITexture | RHITexture.h |
GPU 纹理资源,存储 1D/2D/3D 图像数据 |
| RHIShader | RHIShader.h |
着色器资源,管理顶点、像素等着色器程序 |
命令执行
| 类 | 文档 | 描述 |
|---|---|---|
| RHICommandList | RHICommandList.h |
命令列表,记录 GPU 命令 |
| RHICommandQueue | RHICommandQueue.h |
命令队列,提交和执行命令列表 |
| RHISwapChain | RHISwapChain.h |
交换链,管理帧缓冲区和显示输出 |
同步与状态
| 类 | 文档 | 描述 |
|---|---|---|
| RHIFence | RHIFence.h |
同步栅栏,CPU/GPU 同步原语 |
| RHIPipelineState | RHIPipelineState.h |
管线状态对象,封装渲染管线配置 |
| RHISampler | RHISampler.h |
纹理采样器,配置纹理过滤和寻址模式 |
| RHIPipelineLayout | RHIPipelineLayout.h |
管线布局,定义着色器资源绑定布局 |
| RHIDescriptorPool | RHIDescriptorPool.h |
描述符池,管理 GPU 描述符分配 |
类型与能力
| 类 | 文档 | 描述 |
|---|---|---|
| RHICapabilities | RHICapabilities.h |
设备能力结构,描述支持的图形特性 |
| RHITypes | RHITypes.h |
类型定义,包含所有结构体描述符 |
| RHIEnums | RHIEnums.h |
枚举定义,包含所有枚举类型 |
使用流程
#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 实现
| 类 | 文档 | 描述 |
|---|---|---|
| D3D12RenderTargetView | D3D12RenderTargetView.h |
DirectX 12 渲染目标视图实现 |
| D3D12Shader | D3D12Shader.h |
DirectX 12 着色器资源实现 |
| D3D12Texture | D3D12Texture.h |
DirectX 12 纹理资源实现 |
| D3D12SwapChain | D3D12SwapChain.h |
DirectX 12 交换链实现 |
| D3D12UnorderedAccessView | D3D12UnorderedAccessView.h |
DirectX 12 无序访问视图实现 |
| D3D12Screenshot | D3D12Screenshot.h |
DirectX 12 渲染目标截图工具 |
| D3D12Enum | D3D12Enum.h |
DirectX 12 枚举类型转换函数 |
OpenGL 实现
| 类 | 文档 | 描述 |
|---|---|---|
| OpenGLBuffer | OpenGLBuffer.h |
OpenGL 缓冲区资源实现 |
| OpenGLRenderTargetView | OpenGLRenderTargetView.h |
OpenGL 渲染目标视图实现 |
相关文档
- RHI 模块源码 - 源代码位置