Files
XCEngine/docs/api/rhi/buffer/buffer.md
ssdfasd d83ed56177 fix(rhi): Fix RHI abstraction layer API docs per api-skill.md template
- Rename texture/dtor.md to destructor.md per template spec
- Remove duplicate non-hyphenated fence docs (getnativehandle.md, issignaled.md, getcompletedvalue.md)
- Fix template field issues:
  - swap-chain, command-queue: 类型 now uses 'class (abstract)'
  - sampler: 头文件 now uses full path 'XCEngine/RHI/RHISampler.h'
  - types: 类型 fixed from 'structs' to 'struct'
  - enums: 类型 fixed from 'enums' to 'enum class'
- Fix include paths in command-queue and pipeline-layout code examples
- Create missing constructor/destructor docs for 11 classes:
  buffer, texture, shader, device, command-list, command-queue,
  fence, sampler, swap-chain, pipeline-state, pipeline-layout
- Update class overview pages to include constructor/destructor entries
2026-03-22 03:07:41 +08:00

3.0 KiB

RHIBuffer

命名空间: XCEngine::RHI

类型: class (abstract)

头文件: XCEngine/RHI/RHIBuffer.h

描述: GPU 缓冲区资源抽象接口,用于管理顶点缓冲、索引缓冲、常量缓冲等 GPU 内存资源。

概述

RHIBuffer 封装了 GPU 缓冲区的创建、数据上传、状态管理等操作。支持多种缓冲区类型,包括顶点缓冲、索引缓冲、常量缓冲等。

公共方法

方法 描述
RHIBuffer 默认构造函数
~RHIBuffer 虚析构函数
Map 映射缓冲区到 CPU 可访问内存
Unmap 取消映射
SetData 设置缓冲区数据
GetSize 获取缓冲区大小
GetBufferType 获取缓冲区类型
SetBufferType 设置缓冲区类型
GetStride 获取缓冲区步长
SetStride 设置缓冲区步长
GetState 获取资源状态
SetState 设置资源状态
Shutdown 关闭并释放资源
GetNativeHandle 获取原生句柄
GetName 获取资源名称
SetName 设置资源名称

缓冲区类型 (BufferType)

枚举值 描述
BufferType::Vertex 顶点缓冲
BufferType::Index 索引缓冲
BufferType::Constant 常量缓冲 (Constant Buffer)
BufferType::ReadBack 回读缓冲(用于 CPU 读取 GPU 数据)
BufferType::Indirect 间接执行缓冲
BufferType::RaytracingAccelerationStructure 光线追踪加速结构
BufferType::ShaderBindingTable 光线追踪着色器绑定表

资源状态 (ResourceStates)

状态 描述
Common 默认状态
VertexAndConstantBuffer 顶点/常量缓冲
IndexBuffer 索引缓冲
RenderTarget 渲染目标
UnorderedAccess 无序访问
DepthWrite 深度写入
DepthRead 深度读取
NonPixelShaderResource 非像素着色器资源
PixelShaderResource 像素着色器资源
CopySrc 复制源
CopyDst 复制目标
Present 呈现状态
GenericRead 通用读取

使用示例

BufferDesc desc;
desc.size = sizeof(Vertex) * vertexCount;
desc.stride = sizeof(Vertex);
desc.bufferType = (uint32_t)BufferType::Vertex;
desc.flags = 0;

RHIBuffer* vertexBuffer = device->CreateBuffer(desc);

void* mapped = vertexBuffer->Map();
memcpy(mapped, vertexData, desc.size);
vertexBuffer->Unmap();

vertexBuffer->SetState(ResourceStates::VertexAndConstantBuffer);
vertexBuffer->Shutdown();

相关文档