30 lines
896 B
Markdown
30 lines
896 B
Markdown
# 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) - 初始化缓冲区 |