Files
XCEngine/docs/api/rhi/d3d12/buffer/buffer.md
2026-03-20 02:35:45 +08:00

2.9 KiB

D3D12Buffer

命名空间: XCEngine::RHI

类型: class (继承自 RHIBuffer)

描述: DirectX 12 缓冲区的 D3D12 实现,继承自 RHIBuffer

概述

D3D12Buffer 是 RHI 缓冲区接口的 DirectX 12 后端实现。该类封装了 ID3D12Resource 对象,提供缓冲区的创建、初始化、数据更新和状态管理功能。支持顶点缓冲区、索引缓冲区、常量缓冲区等多种缓冲区类型。

公共方法

D3D12 特有方法

方法 描述
Initialize 初始化缓冲区
InitializeFromExisting 从现有资源初始化
InitializeWithData 初始化并写入数据
UpdateData 更新数据
GetResource 获取 D3D12 资源
GetDesc 获取描述符
GetGPUVirtualAddress 获取 GPU 虚拟地址
GetGPUAddress 获取 GPU 地址

继承自 RHIBuffer 的方法

方法 描述
Shutdown 关闭缓冲区
Map 映射缓冲区
Unmap 取消映射
SetData 设置数据
GetSize 获取缓冲区大小
GetState 获取资源状态
SetState 设置资源状态
GetName 获取资源名称
SetName 设置资源名称
GetStride 获取步长
SetStride 设置步长
GetBufferType 获取缓冲区类型
SetBufferType 设置缓冲区类型
GetNativeHandle 获取原生句柄

使用示例

// 创建顶点缓冲区
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);

相关文档