我什么时候可以发布源PBO
When can I release a source PBO?
我使用PBO在cpu和gpu之间异步移动数据。
当从GPU移动时,我知道我可以在PBO上调用glMapBuffer后删除源纹理。
然而,反过来呢?我什么时候知道从PBO到纹理(glTexSubImage2D(…,NULL))的传输已经完成,并且我可以安全地释放或重复使用PBO?是我刚绑定纹理还是其他什么?
我认为在调用glTexImage
之后,您可以安全地删除或重用缓冲区而不会出错,因为驱动程序可以为您处理一切,包括延迟销毁(这是缓冲区对象的优势)。但这意味着,对glMapBuffer
的调用可能会阻塞,直到前一个glTexImage
拷贝完成。如果您想重用缓冲区并覆盖其全部内容,通常的做法是在调用glMapBuffer
之前用glBufferData
重新定位它。通过这种方式,驱动程序知道您不再关心以前的内容,并可以分配一个新的缓冲区,您可以立即使用该缓冲区(当确实不再使用时,驱动程序会释放包含以前内容的内存)。请记住,缓冲区对象只是内存的句柄,驱动程序可以随心所欲地管理和复制它。
编辑:这意味着通过另一种方式(GPU-CPU),您可以在glGetTexImage
返回后删除源纹理,因为驱动程序在幕后管理一切。是否使用缓冲区对象的决定不应影响调用GL函数的顺序和时间。请记住,调用glDelete...
不会立即删除对象,它只是将此命令排入GL命令流,即使这样,当它真正释放任何内存时,也取决于驱动程序。
相关文章:
- 从多个源构造一个对象,包括一个对象向量
- 使用源向量作为目标
- 如何在加密++中将两个源组合成新的源
- 从Q_INVOKABLE功能或插槽中更改QQuick图像源
- 错误:(-210:不支持的格式或格式组合)功能'create'中的硬件视频解码器不支持视频源
- 从C++更改 QML 图像源
- CMake 错误"源似乎不包含 CMakeLists.txt",路径/库连接问题
- 在Visual Studio C++项目中包含源库的正确方法是什么?
- 以跨平台的方式将图像源路径从C++发送到 QML
- 使用莱布尼茨公式的 Pi 近似
- 使用源读取器从网络摄像头源获取 H264 样本
- 介子项目:我可以将部分源位于其他地方吗?
- 将源中的 GLEW 与 cmake 静态链接
- 在之后仍需要使用源对象时调用父移动分配运算符
- 如何在C++项目中组合着色器源?
- 使用 ReadTheOrg 将识字程序导出为 HTML 时保留源块的内容
- 使用 Clang LibTooling 扫描C++在模板化父类中调用本地类的源
- 使用 Vivek 的 Vcam / 捕获源过滤器构建/链接错误
- 提升不良词法强制转换:将字符串转换为无符号长整型时,无法将源类型值解释为目标
- 我什么时候可以发布源PBO