【发布时间】:2020-03-21 20:21:59
【问题描述】:
我目前正在使用 OpenGL - 4.4 版,我对glMapBuffer 函数有疑问。在我使用过的其他一些 API(例如 DX12 和 VK)中,您可以保持 map 函数返回的指针处于活动状态,并通过单独的调用刷新内存,而不是释放该指针。
有没有办法让这个指针保持更长的时间并更新 GPU 内存而不释放这个调用 glUnmapBuffer 的指针?
【问题讨论】:
我目前正在使用 OpenGL - 4.4 版,我对glMapBuffer 函数有疑问。在我使用过的其他一些 API(例如 DX12 和 VK)中,您可以保持 map 函数返回的指针处于活动状态,并通过单独的调用刷新内存,而不是释放该指针。
有没有办法让这个指针保持更长的时间并更新 GPU 内存而不释放这个调用 glUnmapBuffer 的指针?
【问题讨论】:
可以使用GL_MAP_PERSISTENT_BIT 标志分配具有immutable storage(使用GL 4.4 中的gl(Named)BufferStorage 或ARB_buffer_storage)的缓冲区对象。这允许glMap(Named)BufferRange 被赋予相同的标志,从而持久地映射缓冲区存储的该范围。
存储为persistently mapped 的缓冲区可用于许多缓冲区操作,而无需先取消映射。但是,所有同步数据访问的责任现在都由 用户 承担。所以要习惯于使用栅栏和双缓冲到access/manipulate the data。
【讨论】: