压缩帧缓冲卸载

时间:2015-08-14 02:46:10

标签: c++ linux opengl

我正在尝试编写可以将帧缓冲从一张卡卸载到另一张卡的代码,我想知道是否有可能有效地使用压缩,因为在我的情况下内存似乎是瓶颈。

目前,我使用简单的回读&显示例程:

回读:

glWaitsync(..);
glReadPixels(.., GL_BGRA, GL_UNISGNED_BYTE, NULL);
GLvoid *data = glMapBuffer(GL_PIXEL_PACK_BUFFER_EXT, GL_READ_ONLY);

显示:

glGenBuffers(2, pbos);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_EXT, pbos[curr_ctx ^ 1]);
glBufferData(GL_PIXEL_UNPACK_BUFFER_EXT, width*height*4, NULL,GL_STREAM_DRAW);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_EXT, pbos[curr_ctx]);
glBufferData(GL_PIXEL_UNPACK_BUFFER_EXT, width*height*4, NULL,GL_STREAM_DRAW);
...
glBufferSubData(GL_PIXEL_UNPACK_BUFFER_EXT, 0, width*height*4, data);
glDrawPixels(width, height, GL_BGRA, GL_UNSIGNED_BYTE, NULL);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_EXT, pbos[cur_ctx ^= 1]);
...
glXSwapBuffers(...);

还有一些通过互斥锁和其他杂项代码进行同步,但这是当前代码的主体。

不幸的是,内存带宽似乎是最大的问题(在显示卡方面,这是一种有能力的USB采集卡)。

有没有办法通过OpenGL压缩(S3TC)优化这个? 最好,我想压缩渲染卡,复制到RAM,然后向下游发送到捕获(显示)卡。

我相信我已经看到有些人通过将帧缓冲复制到纹理,要求GL压缩它来做到这一点,但坦率地说我是GL编程的新手。所以我想我会问这里。

0 个答案:

没有答案