opengl 我应该选择glMapBufferRange而不是glMapBuffer吗?

0s7z1bwu  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(273)

glMapBufferdocumentation表示它只能使用GL_READ_ONLY、GL_WRITE_ONLY或GL_READ_WRITE的枚举访问说明符。
glMapBufferRangedocumentation表示它使用 bitflag 访问说明符,其中包括一种使用GL_MAP_PERSISTENT_BIT永久Map缓冲区的方法。
我想持久地Map缓冲区,所以即使我想Map整个缓冲区,我也应该总是使用glMapBufferRange吗?我还没有看到有人指出这两个函数之间的重要区别,所以我想知道glMapBufferRange是否完全取代了glMapBuffer,或者我是否应该准备在某些情况下使用两者?
(我想我只是感到困惑,因为考虑到命名,我会认为只有子范围才是两个调用之间的区别。)

l3zydbqr

l3zydbqr1#

glMapBufferRange最早是在OpenGL 3中引入的。OpenGL已经发展到为开发人员提供更多的控制,同时尽可能保持向后兼容性。因此glMapBuffer保持不变,glMapBufferRange引入了开发人员想要的显式性(不仅是子范围部分,还有其他位)。
glMapBufferRange让我想起了Vulkan中现在可用的选项(即缓存失效和显式同步)。对于某些用例,在新函数中使用正确的标志可能会获得更好的性能。如果您不使用任何可选标志,其行为应该与旧函数等效(除了子范围部分)。
我想我会一直使用glMapBufferRange,因为它可以做其他东西做的一切。另外,你可以在以后调整性能。只是我的拙见:)

相关问题