如何获取可靠的QGLWidget快照

ypn*_*nos 5 c++ opengl qt qglwidget

在我的应用程序中,我将QGLWidget内容的快照用于两个目的:

  • 使用缓存的pixmap代替时,不会在仅重叠更改时重绘场景
  • 用户可以截取特定图表的截图(3D场景)

我尝试的第一件事是grabFrameBuffer().对于第一个应用程序使用此函数是很自然的,窗口小部件中当前可见的内容正是我想要缓存的内容. 问题:在某些硬件上(例如Intel integrade图形,带有GeForce图形的Mac OS X),获得的图像不包含当前屏幕内容,而是包含之前的内容.因此,如果场景将被绘制两次,则在屏幕上您会看到第二张图,在图像中您看到第一张图(应该是后备缓冲区的内容?).

我尝试的第二件事是renderToPixmap().这使用paintGL(),但不使用paint().我有我所有的东西paint(),因为我使用Qt的绘画功能,只有一小部分代码使用原生GL(beginNativePainting(),endNativePainting()).

我还尝试了常规QWidget的快照功能(QPixmap :: fromWidget(),或者它的名称),但GL帧缓冲区是黑色的.

有关如何解决问题并获得当前绘制场景的可靠描述的任何想法?

Sig*_*erm 2

如何获取可靠的 QGLWidget 快照

将当前场景渲染到帧缓冲区,将帧缓冲区中的数据保存到文件。或者在 glFlush 之后获取当前的后备缓冲区。其他任何内容都可能包括伪影或不完整的场景。