我应该更喜欢glMapBufferRange glMapBuffer?



glMapBuffer的文档说它只能使用GL_READ_ONLY, GL_WRITE_ONLY或GL_READ_WRITE的enum访问说明符。

glMapBufferRange的文档说它使用位标志访问说明符,它包括一种使用GL_MAP_PERSISTENT_BIT持久映射缓冲区的方法。

我想持久地映射缓冲区,所以我应该总是使用glMapBufferRange,即使我想映射整个缓冲区吗?我还没有看到任何人指出这两个函数之间相当重要的区别,所以我想知道glMapBufferRange是否完全取代glMapBuffer,或者我是否应该准备在某些情况下同时使用这两个函数?

(我猜我只是感到困惑,因为给定命名,我认为只有子范围将是两个调用之间的差异。)

glMapBufferRange最初是在opengl3中引入的。OpenGL已经发展到为开发人员提供更多的控制,同时尽可能保持向后兼容性。因此,glMapBuffer保持不变,glMapBufferRange引入了开发人员想要的显式性(不仅是子范围部分,还有其他部分)。

glMapBufferRange让我想起了现在Vulkan中可用的选项(即缓存无效和显式同步)。对于某些用例,使用新函数的正确标志可能会获得更好的性能。如果你不使用任何可选标志,行为应该等同于旧的函数(除了子范围部分)。

我想我会一直使用glMapBufferRange,因为它可以做其他做的一切。另外,您可以稍后调整性能。这只是我的拙见:)