2014-12-13 86 views
1

有没有办法直接后备缓冲数据复制到显存?我的意思是不使用系统内存。所有这一切,我发现迄今(如thisthis)的方法复制后备缓冲区的内容到系统内存这需要时间显著量。复制后备缓冲直接显存

我的任务是创建一个表面或视频存储纹理,并告诉图形适配器后备缓冲区直接拷贝到那里,不使用总线。谢谢

+0

和渲染直接使用FBO到纹理?比你可以复制使用纹理四用一个简单的绘制调用到后备缓冲... – 2014-12-13 16:24:16

+0

因为你必须等待渲染阅读之前赶上这引发延迟另一种选择,但一个是使用像素缓冲区对象。 _你可以更详细地解释一下你打算用后缓冲器做什么?如果你想捕捉像FRAPS那样的视频,那么像素缓冲对象实际上是一个更合适的选择 - 它会引入一些帧延​​迟,但在这种情况下可以接受。 _此外,为什么标记OpenGL和DirectX?_ – 2014-12-13 17:31:21

+0

谢谢你的答案。我试图捕获显示内容,然后使用着色器在GPU上处理它。所以我没有渲染任何东西,只是抓住屏幕并处理它,然后从GPU读取少量结果数据。 – Isso 2014-12-13 17:58:58

回答

1

后台缓冲已经在视频内存,顺便说一句 - 只是不一定完成当你想要它。您的性能问题实际上可能是由于在等待渲染完成时强制管线失速;你的描述很难说。

如果画成一个FBO图片附件,你可以做到这一点,而不会导致一个摊位,但你会被绘制成一个单独的缓冲区,而不是窗口系统的交换链(后台缓存)。因此,当交换缓冲区时,结果不会出现在屏幕上,您将不得不手动调用glBlitFramebuffer (...)或使用附加到FBO的图像作为纹理绘制纹理四元组。

+0

Andon,谢谢你的回答。我没有渲染任何东西,我只需要捕获显示内容,然后使用着色器在GPU上处理它,最后将处理结果(这是少量数据)读取到系统内存。 – Isso 2014-12-13 18:01:57