asynchronous - Opengl 异步 PBO 读取
问题描述
我正在开发一个需要从 openGL 帧缓冲区读回整个帧的应用程序。
为了提高性能,我将异步 glReadPixels 与多个 PBO 一起使用:
glBindBuffer(GL_PIXEL_PACK_BUFFER, m_pbos[m_index]);
glReadPixels(0, 0, GLL_WINDOW_SIZE, GLL_WINDOW_SIZE, GL_RED, GL_UNSIGNED_BYTE, 0);
glBindBuffer(GL_PIXEL_PACK_BUFFER, 0);
在阅读了一些教程后,我执行以下操作(例如,使用 2 个 PBO):
- 并条框 N (glDrawArrays)
- 开始从缓冲区异步读取 PBO N(见上文)
- 画框 N+1 (glDrawArrays)
- 从缓冲区开始异步读取 PBO N+1(见上文)
- 同步 PBO 读取 N (glMapBuffer)
- 进程 N
- 画框 N+2 (glDrawArrays)
- ...
这似乎工作正常,但我对管道有些担心。
通常,帧 N+1 (3) 上的绘图操作在帧 N (2) 的异步读取完成之前完成。
帧缓冲区是否被绘图操作覆盖?
如果 glReadPixels 异步运行 (2),帧 N 是否被此覆盖破坏?
解决方案
推荐阅读
- python - Pyspark ImportError:没有名为 spark_df_profiling 的模块
- sql - 在触发函数和 IF 语句中减去查询结果
- php - 如何使用作曲家加载库?
- git - Git post-receive hook实时输出流
- c# - “行”参数不能为空。参数名称:行
- python - 如何使用函数和 sqlalchemy 连接到数据库
- c - 是否可以使用内联 ASM 计算 __cdecl 中的函数(变量)参数?
- r - 正则表达式删除剩余的 ascii 十六进制代码
- python - 为什么在 Pandas 数据框中按日期分组这么慢?
- css - 如何将我的 svg 图像定位到浏览器的中心