我想将一个非常大的内存块的内容传输到足够大的 GPU 缓冲区,然后立即更改 CPU 上的内存内容。类似这样的伪代码:
glBindBuffer(/*very_large_buffer*/);
glBufferSubData(/*very_large_memory_chunk*/);
memset(/*zeros*/, /*very_large_memory_chunk*/);
在这段代码中,glBufferSubData
实际上做了什么?它是在返回之前将very_large_memory_chunk 转移到某个地方,还是只是安排转移操作以供以后执行?因此,如果我立即开始更改 CPU 缓冲区,是否可能会传输部分更改的内存,从而在 GPU 的very_large_buffer 中产生垃圾?
请注意,我不是在询问渲染调用。我知道如果缓冲区用于渲染,传输操作将等到渲染完成,反之亦然。我想知道 OpenGL 在 CPU 到 GPU 传输操作中的行为是否相同。