GL_MAP_INVALIDATE_RANGE_BIT需要glInvalidateBufferSubData吗?

时间:2017-05-26 13:53:56

标签: opengl

这可能是一个奇怪的问题,但要么我没有看到它,要么没有注意到。

我正在使用

glMapBufferRange(GL_ARRAY_BUFFER, 0, BufferSize, GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | GL_MAP_COHERENT_BIT | GL_MAP_INVALIDATE_RANGE_BIT

文档声明:

  

GL_MAP_INVALIDATE_RANGE_BIT表示以前的内容   指定的范围可能会被丢弃。此范围内的数据是   未定义,但随后写入的数据除外。没有GL错误   如果后续GL操作访问未写入的数据,则生成,但是   结果是未定义和系统错误(可能包括程序   终止)可能会发生。此标志不得与之结合使用   GL_MAP_READ_BIT。

现在,如果它现在自动显示(我怀疑)或者是否需要一些像glInvalidateBufferSubData这样的手动触发器,那么这并不向我透露?

我无论如何都看不出任何性能差异,所以我有点好奇。

1 个答案:

答案 0 :(得分:3)

使用该位会导致映射调用导致失效,而不建议;)

但是,如果您使用持久映射,那么指定该位实际上没有意义。您只需要将缓冲区映射一次,因为这有点使用持久映射。在合法的情况下,使持久性映射缓冲区无效可能实际上不会做任何事情。