From 967c64faf8afc2d66a23cfc21540aff6406d6c13 Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Tue, 17 Mar 2026 22:39:59 +0800 Subject: [PATCH] docs: update README with RHI abstraction layer documentation --- README.md | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 98 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 1e062756..7f8a2c97 100644 --- a/README.md +++ b/README.md @@ -4,11 +4,11 @@ ## 项目概述 -XCEngine 是一个正在开发中的图形渲染引擎,使用 DirectX 12 作为底层渲染 API。项目采用模块化设计,包含核心库和单元测试。 +XCEngine 是一个正在开发中的图形渲染引擎,采用 RHI(Render 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 采用 RHI(Render 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 示例版本 -MVS(Multiple Version Samples)是项目的渲染示例部分,展示各种渲染技术: +MVS(Multiple Version Samples)是项目的渲染示例部分,展示各种渲染技术。所有示例均基于 RHI 抽象层开发,可无缝切换 DirectX 12 或 OpenGL 后端。 ### HelloEarth(开发中) -基础的 DirectX 12 渲染示例,展示如何: -- 初始化 DirectX 12 渲染环境 +基础的跨平台渲染示例,展示如何: +- 初始化 RHI 渲染环境(支持 D3D12/OpenGL) - 加载和渲染静态网格 - 使用几何着色器 - 纹理映射