vix*_*vix 6 qt screenshot video-capture qml opengl-es-2.0
我正在尝试实现 30 fps 的屏幕录制(QML 场景),同时还将相同的 QML 场景渲染到我的显示器上。到目前为止,我已经关注了(http://blog.qt.io/blog/2017/02/21/making-movies-qml/)并且已经能够通过使用两个 QML 引擎来实现屏幕上和屏幕外渲染。问题是任何调用glReadPixels( QOpenGLFramebufferObject->toImage) 的保存方法都会阻止屏幕渲染。
我已经学会了解决这个问题的方法是使用像素缓冲区对象 (pbo) 来实现异步传输;我已经在我的桌面平台上实现了这一点,但我需要一个具有 OpenGL ES 2.0 和 QT 5.7.1 的嵌入式平台的解决方案。
有没有其他方法可以使用帧缓冲对象或纹理来实现这一目标?有没有办法复制 GPU 内存空间中的纹理/颜色附件并将图像分块传回?
谢谢,
大多数嵌入式平台都使用统一的内存架构,因此该glReadPixels方法完全有可能不会触发那么多的开销。您可能仍然最好使用从实际帧缓冲区纹理复制的缓冲区纹理环,然后使用栅栏保护这些缓冲区的读取,但您不会遇到因跨越 CPU / GPU 而出现的相同问题桌面平台上的内存边界。