docs: 重构 API 文档结构并修正源码准确性
- 重组文档目录结构: 每个模块的概述页移动到模块子目录
- 重命名 index.md 为 main.md
- 修正所有模块文档中的错误:
- math: FromEuler→FromEulerAngles, TransformDirection 包含缩放, Box 是 OBB, Color::ToRGBA 格式
- containers: 新增 operator==/!= 文档, 补充 std::hash DJB 算法细节
- core: 修复 types 链接错误
- debug: LogLevelToString 返回大写, timestamp 是秒, Profiler 空实现标注, Windows API vs ANSI
- memory: 修复头文件路径, malloc vs operator new, 新增方法文档
- resources: 修复 Shader/Texture 链接错误
- threading: TaskSystem::Wait 空实现标注, ReadWriteLock 重入描述, LambdaTask 链接
- 验证: fix_links.py 确认 0 个断裂引用
2026-03-19 00:22:30 +08:00
|
|
|
|
# RHI 模块
|
|
|
|
|
|
|
|
|
|
|
|
**命名空间**: `XCEngine::RHI`
|
|
|
|
|
|
|
|
|
|
|
|
**描述**: RHI (Rendering Hardware Interface) 是 XCEngine 的硬件抽象层,提供统一的图形 API 接口,支持多个后端实现。
|
|
|
|
|
|
|
2026-03-26 02:00:14 +08:00
|
|
|
|
**头文件**: (多个头文件,详见各类型文档)
|
2026-03-20 02:35:45 +08:00
|
|
|
|
|
docs: 重构 API 文档结构并修正源码准确性
- 重组文档目录结构: 每个模块的概述页移动到模块子目录
- 重命名 index.md 为 main.md
- 修正所有模块文档中的错误:
- math: FromEuler→FromEulerAngles, TransformDirection 包含缩放, Box 是 OBB, Color::ToRGBA 格式
- containers: 新增 operator==/!= 文档, 补充 std::hash DJB 算法细节
- core: 修复 types 链接错误
- debug: LogLevelToString 返回大写, timestamp 是秒, Profiler 空实现标注, Windows API vs ANSI
- memory: 修复头文件路径, malloc vs operator new, 新增方法文档
- resources: 修复 Shader/Texture 链接错误
- threading: TaskSystem::Wait 空实现标注, ReadWriteLock 重入描述, LambdaTask 链接
- 验证: fix_links.py 确认 0 个断裂引用
2026-03-19 00:22:30 +08:00
|
|
|
|
## 概述
|
|
|
|
|
|
|
|
|
|
|
|
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` | 渲染设备抽象,代表图形适配器实例 |
|
2026-03-26 01:29:00 +08:00
|
|
|
|
| [RHIFactory](factory/factory.md) | `RHIFactory.h` | 设备工厂,用于创建不同后端的设备实例 |
|
docs: 重构 API 文档结构并修正源码准确性
- 重组文档目录结构: 每个模块的概述页移动到模块子目录
- 重命名 index.md 为 main.md
- 修正所有模块文档中的错误:
- math: FromEuler→FromEulerAngles, TransformDirection 包含缩放, Box 是 OBB, Color::ToRGBA 格式
- containers: 新增 operator==/!= 文档, 补充 std::hash DJB 算法细节
- core: 修复 types 链接错误
- debug: LogLevelToString 返回大写, timestamp 是秒, Profiler 空实现标注, Windows API vs ANSI
- memory: 修复头文件路径, malloc vs operator new, 新增方法文档
- resources: 修复 Shader/Texture 链接错误
- threading: TaskSystem::Wait 空实现标注, ReadWriteLock 重入描述, LambdaTask 链接
- 验证: fix_links.py 确认 0 个断裂引用
2026-03-19 00:22:30 +08:00
|
|
|
|
|
|
|
|
|
|
### 资源管理
|
|
|
|
|
|
|
|
|
|
|
|
| 类 | 文档 | 描述 |
|
|
|
|
|
|
|----|------|------|
|
|
|
|
|
|
| [RHIBuffer](buffer/buffer.md) | `RHIBuffer.h` | GPU 缓冲区资源,存储顶点、索引、常量等数据 |
|
|
|
|
|
|
| [RHITexture](texture/texture.md) | `RHITexture.h` | GPU 纹理资源,存储 1D/2D/3D 图像数据 |
|
|
|
|
|
|
| [RHIShader](shader/shader.md) | `RHIShader.h` | 着色器资源,管理顶点、像素等着色器程序 |
|
2026-03-26 01:29:00 +08:00
|
|
|
|
| [RHIFramebuffer](framebuffer/framebuffer.md) | `RHIFramebuffer.h` | 帧缓冲对象,管理渲染目标的颜色、深度和模板附件 |
|
docs: 重构 API 文档结构并修正源码准确性
- 重组文档目录结构: 每个模块的概述页移动到模块子目录
- 重命名 index.md 为 main.md
- 修正所有模块文档中的错误:
- math: FromEuler→FromEulerAngles, TransformDirection 包含缩放, Box 是 OBB, Color::ToRGBA 格式
- containers: 新增 operator==/!= 文档, 补充 std::hash DJB 算法细节
- core: 修复 types 链接错误
- debug: LogLevelToString 返回大写, timestamp 是秒, Profiler 空实现标注, Windows API vs ANSI
- memory: 修复头文件路径, malloc vs operator new, 新增方法文档
- resources: 修复 Shader/Texture 链接错误
- threading: TaskSystem::Wait 空实现标注, ReadWriteLock 重入描述, LambdaTask 链接
- 验证: fix_links.py 确认 0 个断裂引用
2026-03-19 00:22:30 +08:00
|
|
|
|
|
|
|
|
|
|
### 命令执行
|
|
|
|
|
|
|
|
|
|
|
|
| 类 | 文档 | 描述 |
|
|
|
|
|
|
|----|------|------|
|
|
|
|
|
|
| [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` | 交换链,管理帧缓冲区和显示输出 |
|
|
|
|
|
|
|
|
|
|
|
|
### 同步与状态
|
|
|
|
|
|
|
|
|
|
|
|
| 类 | 文档 | 描述 |
|
|
|
|
|
|
|----|------|------|
|
refactor: improve test infrastructure and fix OpenGL GLAD initialization
- Rename D3D12Enum.h to D3D12Enums.h for naming consistency
- Fix OpenGL unit test GLAD initialization by using gladLoadGL()
instead of gladLoadGLLoader(wglGetProcAddress) for fallback support
- Migrate remaining tests to use gtest_discover_tests for granular
test discovery (math, core, containers, memory, threading, debug,
components, scene, resources, input, opengl)
- Remove obsolete TEST_RESOURCES_DIR and copy_directory commands
from OpenGL unit test CMakeLists (minimal/Res doesn't exist)
- Update TEST_SPEC.md with performance metrics and per-module
build/test commands for faster development workflow
- Update CMake path references to use lowercase paths
2026-03-23 00:43:02 +08:00
|
|
|
|
| [RHIFence](fence/fence.md) | `RHIFence.h` | 同步栅栏,CPU/GPU 同步原语 |
|
docs: 重构 API 文档结构并修正源码准确性
- 重组文档目录结构: 每个模块的概述页移动到模块子目录
- 重命名 index.md 为 main.md
- 修正所有模块文档中的错误:
- math: FromEuler→FromEulerAngles, TransformDirection 包含缩放, Box 是 OBB, Color::ToRGBA 格式
- containers: 新增 operator==/!= 文档, 补充 std::hash DJB 算法细节
- core: 修复 types 链接错误
- debug: LogLevelToString 返回大写, timestamp 是秒, Profiler 空实现标注, Windows API vs ANSI
- memory: 修复头文件路径, malloc vs operator new, 新增方法文档
- resources: 修复 Shader/Texture 链接错误
- threading: TaskSystem::Wait 空实现标注, ReadWriteLock 重入描述, LambdaTask 链接
- 验证: fix_links.py 确认 0 个断裂引用
2026-03-19 00:22:30 +08:00
|
|
|
|
| [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 描述符分配 |
|
2026-03-26 01:29:00 +08:00
|
|
|
|
| [RHIRenderPass](render-pass/render-pass.md) | `RHIRenderPass.h` | 渲染通道,定义渲染操作的附件配置和加载/存储行为 |
|
docs: 重构 API 文档结构并修正源码准确性
- 重组文档目录结构: 每个模块的概述页移动到模块子目录
- 重命名 index.md 为 main.md
- 修正所有模块文档中的错误:
- math: FromEuler→FromEulerAngles, TransformDirection 包含缩放, Box 是 OBB, Color::ToRGBA 格式
- containers: 新增 operator==/!= 文档, 补充 std::hash DJB 算法细节
- core: 修复 types 链接错误
- debug: LogLevelToString 返回大写, timestamp 是秒, Profiler 空实现标注, Windows API vs ANSI
- memory: 修复头文件路径, malloc vs operator new, 新增方法文档
- resources: 修复 Shader/Texture 链接错误
- threading: TaskSystem::Wait 空实现标注, ReadWriteLock 重入描述, LambdaTask 链接
- 验证: fix_links.py 确认 0 个断裂引用
2026-03-19 00:22:30 +08:00
|
|
|
|
|
|
|
|
|
|
### 类型与能力
|
|
|
|
|
|
|
|
|
|
|
|
| 类 | 文档 | 描述 |
|
|
|
|
|
|
|----|------|------|
|
|
|
|
|
|
| [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. 渲染循环
|
2026-03-26 01:58:16 +08:00
|
|
|
|
while (true) {
|
docs: 重构 API 文档结构并修正源码准确性
- 重组文档目录结构: 每个模块的概述页移动到模块子目录
- 重命名 index.md 为 main.md
- 修正所有模块文档中的错误:
- math: FromEuler→FromEulerAngles, TransformDirection 包含缩放, Box 是 OBB, Color::ToRGBA 格式
- containers: 新增 operator==/!= 文档, 补充 std::hash DJB 算法细节
- core: 修复 types 链接错误
- debug: LogLevelToString 返回大写, timestamp 是秒, Profiler 空实现标注, Windows API vs ANSI
- memory: 修复头文件路径, malloc vs operator new, 新增方法文档
- resources: 修复 Shader/Texture 链接错误
- threading: TaskSystem::Wait 空实现标注, ReadWriteLock 重入描述, LambdaTask 链接
- 验证: fix_links.py 确认 0 个断裂引用
2026-03-19 00:22:30 +08:00
|
|
|
|
cmdQueue->ExecuteCommandLists(1, (void**)&cmdList);
|
2026-03-26 01:58:16 +08:00
|
|
|
|
swapChain->Present(1, 0);
|
docs: 重构 API 文档结构并修正源码准确性
- 重组文档目录结构: 每个模块的概述页移动到模块子目录
- 重命名 index.md 为 main.md
- 修正所有模块文档中的错误:
- math: FromEuler→FromEulerAngles, TransformDirection 包含缩放, Box 是 OBB, Color::ToRGBA 格式
- containers: 新增 operator==/!= 文档, 补充 std::hash DJB 算法细节
- core: 修复 types 链接错误
- debug: LogLevelToString 返回大写, timestamp 是秒, Profiler 空实现标注, Windows API vs ANSI
- memory: 修复头文件路径, malloc vs operator new, 新增方法文档
- resources: 修复 Shader/Texture 链接错误
- threading: TaskSystem::Wait 空实现标注, ReadWriteLock 重入描述, LambdaTask 链接
- 验证: fix_links.py 确认 0 个断裂引用
2026-03-19 00:22:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 6. 清理
|
|
|
|
|
|
device->Shutdown();
|
|
|
|
|
|
delete device;
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 后端文档
|
|
|
|
|
|
|
2026-03-20 02:35:45 +08:00
|
|
|
|
- [D3D12 后端](d3d12/d3d12.md) - DirectX 12 实现详情
|
2026-03-21 15:55:04 +08:00
|
|
|
|
- [OpenGL 后端](opengl/opengl.md) - OpenGL 实现详情
|
docs: 重构 API 文档结构并修正源码准确性
- 重组文档目录结构: 每个模块的概述页移动到模块子目录
- 重命名 index.md 为 main.md
- 修正所有模块文档中的错误:
- math: FromEuler→FromEulerAngles, TransformDirection 包含缩放, Box 是 OBB, Color::ToRGBA 格式
- containers: 新增 operator==/!= 文档, 补充 std::hash DJB 算法细节
- core: 修复 types 链接错误
- debug: LogLevelToString 返回大写, timestamp 是秒, Profiler 空实现标注, Windows API vs ANSI
- memory: 修复头文件路径, malloc vs operator new, 新增方法文档
- resources: 修复 Shader/Texture 链接错误
- threading: TaskSystem::Wait 空实现标注, ReadWriteLock 重入描述, LambdaTask 链接
- 验证: fix_links.py 确认 0 个断裂引用
2026-03-19 00:22:30 +08:00
|
|
|
|
|
2026-03-20 02:35:45 +08:00
|
|
|
|
### D3D12 实现
|
|
|
|
|
|
|
|
|
|
|
|
| 类 | 文档 | 描述 |
|
|
|
|
|
|
|----|------|------|
|
|
|
|
|
|
| [D3D12RenderTargetView](d3d12/render-target-view/render-target-view.md) | `D3D12RenderTargetView.h` | DirectX 12 渲染目标视图实现 |
|
2026-03-26 01:57:12 +08:00
|
|
|
|
| [D3D12Shader](d3d12/shader/shader.md) | `D3D12Shader.h` | DirectX 12 着色器资源实现 |
|
|
|
|
|
|
| [D3D12Texture](d3d12/texture/texture.md) | `D3D12Texture.h` | DirectX 12 纹理资源实现 |
|
|
|
|
|
|
| [D3D12SwapChain](d3d12/swap-chain/swap-chain.md) | `D3D12SwapChain.h` | DirectX 12 交换链实现 |
|
|
|
|
|
|
| [D3D12UnorderedAccessView](d3d12/unordered-access-view/unordered-access-view.md) | `D3D12UnorderedAccessView.h` | DirectX 12 无序访问视图实现 |
|
|
|
|
|
|
| [D3D12Screenshot](d3d12/screenshot/screenshot.md) | `D3D12Screenshot.h` | DirectX 12 渲染目标截图工具 |
|
|
|
|
|
|
| [D3D12Enum](d3d12/enums/enums.md) | `D3D12Enums.h` | DirectX 12 枚举类型转换函数 |
|
2026-03-20 02:35:45 +08:00
|
|
|
|
|
|
|
|
|
|
### OpenGL 实现
|
|
|
|
|
|
|
|
|
|
|
|
| 类 | 文档 | 描述 |
|
|
|
|
|
|
|----|------|------|
|
2026-03-26 01:57:12 +08:00
|
|
|
|
| [OpenGLBuffer](opengl/buffer/buffer.md) | `OpenGLBuffer.h` | OpenGL 缓冲区资源实现 |
|
|
|
|
|
|
| [OpenGLRenderTargetView](opengl/render-target-view/render-target-view.md) | `OpenGLRenderTargetView.h` | OpenGL 渲染目标视图实现 |
|
2026-03-20 02:35:45 +08:00
|
|
|
|
|
docs: 重构 API 文档结构并修正源码准确性
- 重组文档目录结构: 每个模块的概述页移动到模块子目录
- 重命名 index.md 为 main.md
- 修正所有模块文档中的错误:
- math: FromEuler→FromEulerAngles, TransformDirection 包含缩放, Box 是 OBB, Color::ToRGBA 格式
- containers: 新增 operator==/!= 文档, 补充 std::hash DJB 算法细节
- core: 修复 types 链接错误
- debug: LogLevelToString 返回大写, timestamp 是秒, Profiler 空实现标注, Windows API vs ANSI
- memory: 修复头文件路径, malloc vs operator new, 新增方法文档
- resources: 修复 Shader/Texture 链接错误
- threading: TaskSystem::Wait 空实现标注, ReadWriteLock 重入描述, LambdaTask 链接
- 验证: fix_links.py 确认 0 个断裂引用
2026-03-19 00:22:30 +08:00
|
|
|
|
## 相关文档
|
|
|
|
|
|
|
2026-03-26 02:00:14 +08:00
|
|
|
|
- [RHI 模块源码](../../../engine/include/XCEngine/RHI/) - 源代码位置
|