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
|
|
|
# D3D12Buffer
|
|
|
|
|
|
|
|
|
|
**命名空间**: `XCEngine::RHI`
|
|
|
|
|
|
2026-03-20 02:35:45 +08:00
|
|
|
**类型**: `class` (继承自 `RHIBuffer`)
|
|
|
|
|
|
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
|
|
|
**描述**: DirectX 12 缓冲区的 D3D12 实现,继承自 `RHIBuffer`。
|
|
|
|
|
|
2026-03-20 02:35:45 +08:00
|
|
|
## 概述
|
|
|
|
|
|
|
|
|
|
`D3D12Buffer` 是 RHI 缓冲区接口的 DirectX 12 后端实现。该类封装了 `ID3D12Resource` 对象,提供缓冲区的创建、初始化、数据更新和状态管理功能。支持顶点缓冲区、索引缓冲区、常量缓冲区等多种缓冲区类型。
|
|
|
|
|
|
2026-03-19 02:01:18 +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-20 02:35:45 +08:00
|
|
|
### D3D12 特有方法
|
|
|
|
|
|
2026-03-19 02:01:18 +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-19 02:01:18 +08:00
|
|
|
| [`Initialize`](initialize.md) | 初始化缓冲区 |
|
|
|
|
|
| [`InitializeFromExisting`](initialize-from-existing.md) | 从现有资源初始化 |
|
|
|
|
|
| [`InitializeWithData`](initialize-with-data.md) | 初始化并写入数据 |
|
|
|
|
|
| [`UpdateData`](update-data.md) | 更新数据 |
|
|
|
|
|
| [`GetResource`](get-resource.md) | 获取 D3D12 资源 |
|
|
|
|
|
| [`GetDesc`](get-desc.md) | 获取描述符 |
|
|
|
|
|
| [`GetGPUVirtualAddress`](get-gpu-virtual-address.md) | 获取 GPU 虚拟地址 |
|
|
|
|
|
| [`GetGPUAddress`](get-gpu-address.md) | 获取 GPU 地址 |
|
2026-03-20 02:35:45 +08:00
|
|
|
|
|
|
|
|
### 继承自 RHIBuffer 的方法
|
|
|
|
|
|
|
|
|
|
| 方法 | 描述 |
|
|
|
|
|
|------|------|
|
|
|
|
|
| [`Shutdown`](../../buffer/shutdown.md) | 关闭缓冲区 |
|
|
|
|
|
| [`Map`](../../buffer/map.md) | 映射缓冲区 |
|
|
|
|
|
| [`Unmap`](../../buffer/unmap.md) | 取消映射 |
|
|
|
|
|
| [`SetData`](../../buffer/set-data.md) | 设置数据 |
|
|
|
|
|
| [`GetSize`](../../buffer/get-size.md) | 获取缓冲区大小 |
|
|
|
|
|
| [`GetState`](../../buffer/get-state.md) | 获取资源状态 |
|
2026-03-19 02:01:18 +08:00
|
|
|
| [`SetState`](../../buffer/set-state.md) | 设置资源状态 |
|
2026-03-20 02:35:45 +08:00
|
|
|
| [`GetName`](../../buffer/get-name.md) | 获取资源名称 |
|
2026-03-19 02:01:18 +08:00
|
|
|
| [`SetName`](../../buffer/set-name.md) | 设置资源名称 |
|
2026-03-20 02:35:45 +08:00
|
|
|
| [`GetStride`](../../buffer/get-stride.md) | 获取步长 |
|
2026-03-19 02:01:18 +08:00
|
|
|
| [`SetStride`](../../buffer/set-stride.md) | 设置步长 |
|
2026-03-20 02:35:45 +08:00
|
|
|
| [`GetBufferType`](../../buffer/get-buffer-type.md) | 获取缓冲区类型 |
|
2026-03-19 02:01:18 +08:00
|
|
|
| [`SetBufferType`](../../buffer/set-buffer-type.md) | 设置缓冲区类型 |
|
2026-03-20 02:35:45 +08:00
|
|
|
| [`GetNativeHandle`](../../buffer/get-native-handle.md) | 获取原生句柄 |
|
|
|
|
|
|
|
|
|
|
## 使用示例
|
|
|
|
|
|
|
|
|
|
```cpp
|
|
|
|
|
// 创建顶点缓冲区
|
|
|
|
|
D3D12Buffer vertexBuffer;
|
|
|
|
|
vertexBuffer.Initialize(
|
|
|
|
|
device,
|
|
|
|
|
sizeof(Vertex) * vertexCount,
|
|
|
|
|
D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER,
|
|
|
|
|
D3D12_HEAP_TYPE_DEFAULT);
|
|
|
|
|
vertexBuffer.SetName(L"VertexBuffer");
|
|
|
|
|
vertexBuffer.SetBufferType(BufferType::Vertex);
|
|
|
|
|
vertexBuffer.SetStride(sizeof(Vertex));
|
|
|
|
|
|
|
|
|
|
// 创建索引缓冲区(带初始数据)
|
|
|
|
|
D3D12Buffer indexBuffer;
|
|
|
|
|
uint16_t indices[] = { 0, 1, 2, 1, 3, 2 };
|
|
|
|
|
indexBuffer.InitializeWithData(
|
|
|
|
|
device,
|
|
|
|
|
commandList,
|
|
|
|
|
indices,
|
|
|
|
|
sizeof(indices),
|
|
|
|
|
D3D12_RESOURCE_STATE_INDEX_BUFFER);
|
|
|
|
|
|
|
|
|
|
// 使用 UPLOAD 堆更新数据
|
|
|
|
|
D3D12Buffer uploadBuffer;
|
|
|
|
|
uploadBuffer.Initialize(device, uploadSize, D3D12_RESOURCE_STATE_GENERIC_READ, D3D12_HEAP_TYPE_UPLOAD);
|
|
|
|
|
uploadBuffer.UpdateData(newData, dataSize);
|
|
|
|
|
```
|
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 后端总览](../../d3d12/d3d12.md)
|
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) - 抽象缓冲区接口
|