docs: update README with RHI abstraction layer documentation

This commit is contained in:
2026-03-17 22:39:59 +08:00
parent 4710e6ba60
commit 967c64faf8

105
README.md
View File

@@ -4,11 +4,11 @@
## 项目概述
XCEngine 是一个正在开发中的图形渲染引擎,使DirectX 12 作为底层渲染 API。项目采用模块化设计包含核心库和单元测试。
XCEngine 是一个正在开发中的图形渲染引擎,RHIRender Hardware Interface抽象层设计支持 DirectX 12 和 OpenGL 多种渲染 API。项目采用模块化设计包含核心库和单元测试。
## 技术栈
- **渲染 API**: DirectX 12
- **渲染 API**: DirectX 12, OpenGL 4.6+
- **语言**: C++17
- **构建系统**: CMake
- **测试框架**: Google Test
@@ -44,20 +44,76 @@ XCEngine/
│ │ │ ├── Matrix.h
│ │ │ ├── Quaternion.h
│ │ │ └── ...
│ │ ├── RHI/ # 渲染硬件接口抽象层
│ │ │ ├── RHIDevice.h
│ │ │ ├── RHICommandQueue.h
│ │ │ ├── RHICommandList.h
│ │ │ ├── RHISwapChain.h
│ │ │ ├── RHIPipelineState.h
│ │ │ ├── RHIBuffer.h
│ │ │ ├── RHITexture.h
│ │ │ ├── RHIShader.h
│ │ │ ├── RHISampler.h
│ │ │ ├── RHIFence.h
│ │ │ ├── RHITypes.h
│ │ │ ├── RHICapabilities.h
│ │ │ ├── RHIEnums.h
│ │ │ ├── OpenGL/ # OpenGL 后端实现
│ │ │ │ ├── OpenGLDevice.h
│ │ │ │ ├── OpenGLCommandQueue.h
│ │ │ │ ├── OpenGLCommandList.h
│ │ │ │ ├── OpenGLSwapChain.h
│ │ │ │ ├── OpenGLPipelineState.h
│ │ │ │ ├── OpenGLBuffer.h
│ │ │ │ ├── OpenGLTexture.h
│ │ │ │ ├── OpenGLShader.h
│ │ │ │ ├── OpenGLSampler.h
│ │ │ │ ├── OpenGLFence.h
│ │ │ │ ├── OpenGLVertexArray.h
│ │ │ │ ├── OpenGLRenderTargetView.h
│ │ │ │ └── OpenGLDepthStencilView.h
│ │ │ └── D3D12/ # DirectX 12 后端实现
│ │ │ ├── D3D12Device.h
│ │ │ ├── D3D12CommandQueue.h
│ │ │ ├── D3D12CommandList.h
│ │ │ ├── D3D12CommandAllocator.h
│ │ │ ├── D3D12SwapChain.h
│ │ │ ├── D3D12PipelineState.h
│ │ │ ├── D3D12Buffer.h
│ │ │ ├── D3D12Texture.h
│ │ │ ├── D3D12Shader.h
│ │ │ ├── D3D12Sampler.h
│ │ │ ├── D3D12Fence.h
│ │ │ ├── D3D12DescriptorHeap.h
│ │ │ ├── D3D12RootSignature.h
│ │ │ ├── D3D12RenderTargetView.h
│ │ │ ├── D3D12DepthStencilView.h
│ │ │ ├── D3D12ShaderResourceView.h
│ │ │ ├── D3D12UnorderedAccessView.h
│ │ │ ├── D3D12ConstantBufferView.h
│ │ │ ├── D3D12QueryHeap.h
│ │ │ ├── D3D12Screenshot.h
│ │ │ ├── D3D12Types.h
│ │ │ ├── D3D12Enum.h
│ │ │ └── D3D12Common.h
│ │ └── Core/ # 核心模块
│ │
│ └── src/ # 实现文件
│ ├── Containers/
│ ├── Memory/
│ ├── Threading/
── Math/
── Math/
│ └── RHI/
├── tests/ # 单元测试
│ ├── containers/ # 容器测试
│ ├── memory/ # 内存管理测试
│ ├── threading/ # 线程模块测试
│ ├── core/ # 核心模块测试
── math/ # 数学库测试
── math/ # 数学库测试
│ └── RHI/ # RHI 抽象层测试
│ ├── OpenGL/ # OpenGL 后端测试
│ └── D3D12/ # D3D12 后端测试
├── MVS/ # 多个示例版本(开发中)
│ ├── HelloEarth/ # 基础渲染示例
@@ -141,21 +197,56 @@ build/tests/threading/Debug/xcengine_threading_tests.exe
- **Frustum**: 视锥体
- **Bounds**: 边界框
### RHI渲染硬件接口
XCEngine 采用 RHIRender Hardware Interface抽象层设计支持多渲染后端。
#### 设计原则
- **求同存异**: 提取各 API 共同特性,统一抽象接口
- **分层抽象**: 核心抽象层 → 后端实现层 → 平台适配层
- **特性降级**: 后端不支持的特性优雅降级
- **底层逃逸**: 后端特有方法通过重载暴露
#### 抽象接口
- **RHIDevice**: 渲染设备抽象
- **RHICommandQueue**: 命令队列抽象
- **RHICommandList**: 命令列表抽象
- **RHISwapChain**: 交换链抽象
- **RHIPipelineState**: 渲染管线状态抽象
- **RHIBuffer/RHITexture**: 资源抽象
- **RHIShader**: 着色器抽象
- **RHISampler**: 采样器抽象
- **RHIFence**: 同步栅栏抽象
#### 后端实现
- **OpenGL 后端**: OpenGL 4.6+ 支持
- **D3D12 后端**: DirectX 12 支持
#### 测试覆盖
- OpenGL 后端: 41 个测试用例通过
- D3D12 后端: 编译通过
## 测试覆盖
- Containers: 51+ 测试用例
- Memory: 19 测试用例
- Threading: 13 测试用例
- Math: 通过
- RHI (OpenGL): 41 测试用例通过
- RHI (D3D12): 编译通过
## MVS 示例版本
MVSMultiple Version Samples是项目的渲染示例部分展示各种渲染技术
MVSMultiple Version Samples是项目的渲染示例部分展示各种渲染技术。所有示例均基于 RHI 抽象层开发,可无缝切换 DirectX 12 或 OpenGL 后端。
### HelloEarth开发中
基础的 DirectX 12 渲染示例,展示如何:
- 初始化 DirectX 12 渲染环境
基础的跨平台渲染示例,展示如何:
- 初始化 RHI 渲染环境(支持 D3D12/OpenGL
- 加载和渲染静态网格
- 使用几何着色器
- 纹理映射