68 lines
1.7 KiB
Markdown
68 lines
1.7 KiB
Markdown
|
|
# 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 缓冲区实现
|