glMapBuffer
的documentation表示它只能使用GL_READ_ONLY、GL_WRITE_ONLY或GL_READ_WRITE的枚举访问说明符。glMapBufferRange
的documentation表示它使用 bitflag 访问说明符,其中包括一种使用GL_MAP_PERSISTENT_BIT永久Map缓冲区的方法。
我想持久地Map缓冲区,所以即使我想Map整个缓冲区,我也应该总是使用glMapBufferRange
吗?我还没有看到有人指出这两个函数之间的重要区别,所以我想知道glMapBufferRange
是否完全取代了glMapBuffer
,或者我是否应该准备在某些情况下使用两者?
(我想我只是感到困惑,因为考虑到命名,我会认为只有子范围才是两个调用之间的区别。)
1条答案
按热度按时间l3zydbqr1#
glMapBufferRange
最早是在OpenGL 3中引入的。OpenGL已经发展到为开发人员提供更多的控制,同时尽可能保持向后兼容性。因此glMapBuffer
保持不变,glMapBufferRange
引入了开发人员想要的显式性(不仅是子范围部分,还有其他位)。glMapBufferRange
让我想起了Vulkan中现在可用的选项(即缓存失效和显式同步)。对于某些用例,在新函数中使用正确的标志可能会获得更好的性能。如果您不使用任何可选标志,其行为应该与旧函数等效(除了子范围部分)。我想我会一直使用
glMapBufferRange
,因为它可以做其他东西做的一切。另外,你可以在以后调整性能。只是我的拙见:)