做而不是等待glMapBuffer

时间:2011-05-21 23:24:48

标签: c++ opengl gpgpu low-latency

我正在使用OpenGL进行一些GPGPU处理。所以我有不同的线程为OpenGL处理​​线程提供工作。

在每个“工作项”之后,我需要调用glReadPixels和glMapBuffer,以便将数据从PBO传回主机。然而,问题是glMapBuffer会阻塞线程,即使GPU处于空闲状态,在DMA传输完成之前也无法完成任何有用的工作。解决此问题的常用方法是创建具有最长DMA传输时间深度的管道。但是,由于我正在开发低延迟系统,因此这不是最理想的。

有没有办法可以在单独的线程上等待glMapBuffer ,或者可能会获得关于DMA传输何时完成的通知,以便减少延迟时间尽可能多?

1 个答案:

答案 0 :(得分:2)

在glMapBuffer中阻塞的其他线程中做一些额外的工作吗?您可以拥有多个OpenGL上下文,每个上下文都在自己的线程中激活;如果他们被配置为共享对象,他们可以同时操作。

然而,DMA实际上意味着GPU的工作,至少它的带宽被完全消耗,因此你的性能可能会更差。