- 缓冲区对象 Buffer Objects
- 创建和绑定缓冲区对象 Creating and Binding Buffer Objects
- 创建缓冲对象数据存储 Creating Buffer Object Data Stores
- 修改缓冲对象数据存储 Modifying Buffer Object Data Stores
- Clear缓冲对象数据存储 Clear Buffer Object Data Stores
- 映射映射缓冲数据 Mapping Buffer Data
- 刷新映射缓冲数据 Flush Buffer Data
- 取消映射缓冲数据 Unmapping Buffer Data
- 使缓冲区数据无效 Invalidating Buffer Data
- 缓冲区间复制 Copying Between Buffers
- 缓冲对象查询 Buffer Object Queries
当一个缓冲对象使用 MAP_FLUSH_EXPLICIT_BIT
标志进行映射时,如果对映射范围内的数据进行了修改,可以通过以下命令来指示这些修改:
void glFlushMappedBufferRange( GLenum target, GLintptr offset, GLsizeiptr length );
void glFlushMappedNamedBufferRange( GLuint buffer, GLintptr offset, GLsizeiptr length );
对于 glFlushMappedBufferRange
函数,需要指定目标(target),该目标必须是OpenGL规范表6.1中列出的一种类型,并且是当前绑定到该目标的缓冲对象。而对于 glFlushMappedNamedBufferRange
函数,直接通过缓冲对象的名字(buffer)来指定。
offset
和 length
参数用于指定映射范围内被修改的子区域,单位为基本机器单元。这个要刷新的子区域是相对于当前已映射缓冲对象范围起始位置的偏移量。可以多次调用 FlushMapped*BufferRange
来指示不同需要刷新的子区域。
如果一个缓冲区范围同时设置了 MAP_PERSISTENT_BIT
和 MAP_FLUSH_EXPLICIT_BIT
标志,则可以调用 FlushMapped*BufferRange
确保客户端写入的数据在服务器端变得可见。对于一致存储(coherent store)中的数据,在未指定的一段时间后,它们总会变为服务器端可见。通过显式刷新,可以更精确地控制何时将更改同步至GPU。