# D3D12Buffer **命名空间**: `XCEngine::RHI` **类型**: `class` (继承自 `RHIBuffer`) **描述**: DirectX 12 缓冲区的 D3D12 实现,继承自 `RHIBuffer`。 ## 概述 `D3D12Buffer` 是 RHI 缓冲区接口的 DirectX 12 后端实现。该类封装了 `ID3D12Resource` 对象,提供缓冲区的创建、初始化、数据更新和状态管理功能。支持顶点缓冲区、索引缓冲区、常量缓冲区等多种缓冲区类型。 ## 公共方法 ### D3D12 特有方法 | 方法 | 描述 | |------|------| | [`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 地址 | ### 继承自 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) | 获取资源状态 | | [`SetState`](../../buffer/set-state.md) | 设置资源状态 | | [`GetName`](../../buffer/get-name.md) | 获取资源名称 | | [`SetName`](../../buffer/set-name.md) | 设置资源名称 | | [`GetStride`](../../buffer/get-stride.md) | 获取步长 | | [`SetStride`](../../buffer/set-stride.md) | 设置步长 | | [`GetBufferType`](../../buffer/get-buffer-type.md) | 获取缓冲区类型 | | [`SetBufferType`](../../buffer/set-buffer-type.md) | 设置缓冲区类型 | | [`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); ``` ## 相关文档 - [D3D12 后端总览](../../d3d12/d3d12.md) - [RHIBuffer](../../buffer/buffer.md) - 抽象缓冲区接口