gpt4 book ai didi

c++ - 我什么时候可以发布源 PBO?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:57:14 24 4
gpt4 key购买 nike

我正在使用 PBO 在我的 cpu 和 gpu 之间异步移动数据。

当从 GPU 移动时,我知道在 PBO 上调用 glMapBuffer 后我可以删除源纹理。

但是,反过来呢?我什么时候知道从 PBO 到纹理 (glTexSubImage2D(..., NULL)) 的传输已经完成并且我可以安全地释放或重新使用 PBO?是在我绑定(bind)纹理后还是其他什么时候?

最佳答案

我认为在调用 glTexImage 之后,您可以安全地删除或重新使用缓冲区而不会出错,因为驱动程序会为您处理所有事情,包括延迟销毁(这是缓冲区对象的优势)。但这意味着,对 glMapBuffer 的调用可能会阻塞,直到前面的 glTexImage 复制完成。如果您想重用缓冲区并覆盖其全部内容,通常的做法是在调用 glMapBuffer 之前使用 glBufferData 重新分配它。通过这种方式,驱动程序知道您不再关心以前的内容,并且可以分配一个您可以立即使用的新缓冲区(包含以前内容的内存在真正不再使用时由驱动程序释放)。请记住,您的缓冲区对象只是内存的句柄,驱动程序可以随意管理和复制它。

编辑: 这意味着您可以在 glGetTexImage 返回后以另一种方式 (GPU-CPU) 删除源纹理,因为驱动程序在幕后管理一切。使用或不使用缓冲区对象的决定不应该对您调用 GL 函数的顺序和时间有任何影响。请记住,调用 glDelete... 不会立即删除对象,它只是将此命令排入 GL 命令流,即便如此,在真正释放任何内存时由驱动程序决定。

关于c++ - 我什么时候可以发布源 PBO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6132510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com