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

| 我正在使用PBO在cpu和gpu之间异步移动数据。 从GPU移动时,我知道在PBO上调用glMapBuffer后可以删除源纹理。 但是,反过来呢?我何时知道从PBO到纹理(glTexSubImage2D(...,NULL))的传输已完成,并且可以安全释放或重新使用PBO?是我绑定纹理或其他东西吗?     
已邀请:
我认为在调用“ 0”之后,您可以安全地删除或重用缓冲区而不会出错,因为驱动程序会为您处理所有事情,包括延迟销毁(这是缓冲区对象的优势)。但这意味着,对
glMapBuffer
的调用可能会阻塞,直到之前的
glTexImage
副本完成为止。如果要重用缓冲区并仅覆盖缓冲区的全部内容,通常的做法是在调用
glMapBuffer
之前用
glBufferData
重新分配它。通过这种方式,驱动程序知道您不再关心先前的内容,并可以分配一个可以立即使用的新缓冲区(当真正不再使用该驱动程序时,包含先前内容的内存将由驱动程序释放)。请记住,缓冲区对象只是内存的句柄,驱动程序可以根据需要进行管理和复制。 编辑:这意味着(GPU-CPU)您可以在返回“ 5”之后删除源纹理,因为驱动程序管理着幕后的一切。是否使用缓冲区对象的决定不会对调用GL函数的顺序和时间有任何影响。请记住,调用
glDelete...
不会立即删除对象,它只是将该命令排队到GL命令流中,甚至在真正释放任何内存时将其交给驱动程序。     

要回复问题请先登录注册