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

68 lines
1.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# OpenGLDevice::CreateBuffer
```cpp
RHIBuffer* CreateBuffer(const BufferDesc& desc) override
```
创建 OpenGL 缓冲区对象。
## 详细描述
根据 `BufferDesc` 创建一个 OpenGL 缓冲区对象。缓冲区类型映射:
| BufferDesc.bufferType | OpenGLBufferType |
|----------------------|------------------|
| 0 (默认) | Vertex (顶点缓冲区) |
| 1 | Index (索引缓冲区) |
| 2 | Uniform (常量缓冲区/Uniform Buffer) |
### 缓冲区类型
- **Vertex Buffer**: 存储顶点属性数据位置、法线、UV 等)
- **Index Buffer**: 存储顶点索引,用于索引绘制
- **Uniform Buffer**: 存储着色器 uniforms 数据
## 参数
- `desc` - 缓冲区描述符
### BufferDesc 字段
| 字段 | 描述 |
|------|------|
| `bufferType` | 缓冲区类型 (0=顶点, 1=索引, 2=Uniform) |
| `size` | 缓冲区大小(字节) |
## 返回值
`RHIBuffer*` - 创建的缓冲区指针,失败返回 `nullptr`
## 注意事项
- 当前实现创建的缓冲区初始数据为 `nullptr`(空缓冲区)
- 缓冲区创建后可使用 `OpenGLBuffer` 的接口进行数据更新
- 返回的缓冲区对象归调用者所有,需自行管理生命周期
## 示例
```cpp
// 创建顶点缓冲区
BufferDesc vertexDesc;
vertexDesc.bufferType = 0; // Vertex
vertexDesc.size = sizeof(Vertex) * vertexCount;
RHIBuffer* vertexBuffer = device.CreateBuffer(vertexDesc);
// 创建索引缓冲区
BufferDesc indexDesc;
indexDesc.bufferType = 1; // Index
indexDesc.size = sizeof(uint32_t) * indexCount;
RHIBuffer* indexBuffer = device.CreateBuffer(indexDesc);
```
## 相关文档
- [OpenGLDevice](device.md) - 类总览
- [OpenGLBuffer](../opengl-buffer.md) - OpenGL 缓冲区实现