这可能是一个奇怪的问题,但要么我没有看到它,要么没有注意到。
我正在使用
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这样的手动触发器,那么这并不向我透露?
我无论如何都看不出任何性能差异,所以我有点好奇。
答案 0 :(得分:3)
使用该位会导致映射调用导致失效,而不建议;)
但是,如果您使用持久映射,那么指定该位实际上没有意义。您只需要将缓冲区映射一次,因为这有点使用持久映射。在合法的情况下,使持久性映射缓冲区无效可能实际上不会做任何事情。