我正在使用 OpenGL 进行一些 GPGPU 处理。所以我有不同的线程给 OpenGL 处理线程工作。
在每个“工作项”之后,我需要调用 glReadPixels 和 glMapBuffer 以便将数据从 PBO 传输回主机。然而,问题在于 glMapBuffer 会阻塞线程,并且在 DMA 传输完成之前无法完成任何有用的工作,即使 GPU 处于空闲状态也是如此。解决这个问题的常用方法是创建一个时间深度为最长 DMA 传输的流水线。但是,由于我正在开发一个低延迟系统,所以这是次优的。
有没有办法在单独的线程上等待 glMapBuffer或者可能会收到一些关于 DMA 传输何时完成的通知以尽可能减少延迟?