OpenGL缓冲对象:glUnmapBuffer、glUnmapNamedBuffer

  1. OpenGL缓冲对象概念
  2. 缓冲区对象 Buffer Objects API列表

  1. 缓冲区对象 Buffer Objects
  2. 创建和绑定缓冲区对象 Creating and Binding Buffer Objects
  3. 创建缓冲对象数据存储 Creating Buffer Object Data Stores
  4. 修改缓冲对象数据存储 Modifying Buffer Object Data Stores
  5. Clear缓冲对象数据存储 Clear Buffer Object Data Stores
  6. 映射映射缓冲数据 Mapping Buffer Data
  7. 刷新映射缓冲数据 Flush Buffer Data
  8. 取消映射缓冲数据 Unmapping Buffer Data
  9. 使缓冲区数据无效 Invalidating Buffer Data
  10. 缓冲区间复制 Copying Between Buffers
  11. 缓冲对象查询 Buffer Object Queries

在客户端指定缓冲对象映射范围的内容后,并且在任何OpenGL命令引用该范围内的数据之前,必须通过以下命令释放(解除映射)该映射:

  • boolean glUnmapBuffer( GLenum target );
  • boolean glUnmapNamedBuffer( uint buffer );

对于glUnmapBuffer函数,需要指定目标(target),该目标是当前绑定到的缓冲对象类型,必须是OpenGL规范表6.1中列出的一种类型。而对于glUnmapNamedBuffer函数,直接通过缓冲对象的名字(buffer)来指定。

解除映射一个已映射的缓冲对象会使其数据存储区的指针失效,并将该对象的BUFFER_MAPPED、BUFFER_MAP_POINTER、BUFFER_ACCESS_FLAGS、BUFFER_MAP_OFFSET和BUFFER_MAP_LENGTH状态变量重置为初始值,这些初始值可以在表6.3中查看。

Unmap*Buffer函数通常返回TRUE,除非在缓冲对象被映射期间其数据存储区的数据发生损坏。这种损坏可能是由于屏幕分辨率改变或其它依赖于窗口系统的事件导致的,例如高性能图形内存系统堆被丢弃。OpenGL实现必须保证这类损坏只可能在缓冲对象的数据存储区被映射时发生。如果发生了这样的损坏,Unmap*Buffer将返回FALSE,并且数据存储区的内容变为未定义。

作为缓冲删除(参见第5.1.2节)或BufferData重新初始化而发生的解除映射并不是错误。

缓冲映射是缓冲对象的状态属性,不受是否拥有该缓冲对象的上下文是否为当前上下文的影响。

如果发生错误,函数将返回FALSE。

你可能感兴趣的:(OpenGL,图形渲染)