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
,因为它可以做其他做的一切。另外,您可以稍后调整性能。这只是我的拙见:)