# 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](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 #include 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/) - 源代码位置