# OpenGLBuffer::SetData ```cpp void SetData(const void* data, size_t size, size_t offset = 0) override; ``` 设置缓冲区数据。支持部分更新:当 `offset == 0` 且 `size` 等于缓冲区大小时,使用 `glBufferData` 替换整个缓冲区;否则使用 `glBufferSubData` 进行部分更新。 **参数:** - `data` - 要写入的数据指针 - `size` - 数据大小(字节) - `offset` - 缓冲区内的偏移量(默认 0) **示例:** ```cpp // 更新整个缓冲区 buffer.SetData(vertices, sizeof(vertices)); // 部分更新 buffer.SetData(newVertices, sizeof(newVertices), sizeof(vertices)); ``` **注意:** 动态缓冲区使用 `GL_DYNAMIC_DRAW`,静态缓冲区使用 `GL_STATIC_DRAW`。 ## 相关文档 - [OpenGLBuffer 总览](buffer.md) - 返回类总览 - [Map](map.md) - 映射缓冲区方式写入 - [Initialize](initialize.md) - 初始化缓冲区