Files
XCEngine/docs/api/XCEngine/RHI/OpenGL/OpenGLBuffer/SetData.md

1.3 KiB

OpenGLBuffer::SetData()

void SetData(const void* data, size_t size, size_t offset = 0) override;

作用

更新当前 buffer 的全部或部分内容。

参数

  • data: 源数据指针。
  • size: 要写入的字节数。
  • offset: 写入偏移。

当前实现行为

函数会先绑定目标,然后分两种路径:

  • offset == 0 && size == m_size 时,调用 glBufferData(target, size, data, usage),相当于整块重建存储。
  • 其他情况调用 glBufferSubData(target, offset, size, data),相当于局部更新。

最后它会解绑目标。

重要限制

  • 不会检查 offset + size 是否越界。
  • 不会在局部更新后修改 m_size
  • 如果传入一个和原始大小不同、但又不是“整块覆盖”的写入请求,函数仍然会走 glBufferSubData(),其合法性完全交给驱动。
  • usage 依然只取决于最初初始化时的 m_dynamic

设计说明

很多引擎会把“重建存储”和“局部上传”明确拆成两个接口,因为它们在性能和资源生命周期上的语义并不相同。当前这里把两条路径折叠到一起,优点是简单,缺点是行为边界需要通过文档讲清楚。

相关文档