# 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 缓冲区实现