首页 > 解决方案 > 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):

  1. 并条框 N (glDrawArrays)
  2. 开始从缓冲区异步读取 PBO N(见上文)
  3. 画框 N+1 (glDrawArrays)
  4. 从缓冲区开始异步读取 PBO N+1(见上文)
  5. 同步 PBO 读取 N (glMapBuffer)
  6. 进程 N
  7. 画框 N+2 (glDrawArrays)
  8. ...

这似乎工作正常,但我对管道有些担心。
通常,帧 N+1 (3) 上的绘图操作在帧 N (2) 的异步读取完成之前完成。
帧缓冲区是否被绘图操作覆盖?
如果 glReadPixels 异步运行 (2),帧 N 是否被此覆盖破坏?

标签: asynchronousopenglglreadpixelspbo

解决方案


推荐阅读