在我的应用程序中,我拍摄 QGLWidget 内容的快照有两个目的:
- 当只有覆盖层发生变化时,不要一直重绘场景,而是使用缓存的像素图
- Lat 用户截取特定绘图的屏幕截图(3D 场景)
我尝试的第一件事是grabFrameBuffer()
。对于第一个应用程序来说,使用此功能是很自然的,小部件中当前可见的正是我想要缓存的内容。PROBLEM:在某些硬件上(例如Intel集成显卡、带有GeForce显卡的Mac OS X),获取的图像不包含当前屏幕内容,而是包含之前的内容。因此,如果场景被绘制两次,则在屏幕上您会看到第二次绘制,在图像中您会看到第一次绘制(这应该是后缓冲区的内容?)。
我尝试的第二件事是renderToPixmap()
。这渲染使用paintGL()
,但不使用paint()
。我所有的东西都在里面paint()
,因为我使用 Qt 的绘画功能,并且只有一小部分代码使用本机 GL (beginNativePainting()
, endNativePainting()
).
我还尝试了常规 QWidget 的快照功能(QPixmap::fromWidget(),或它的名称),但 GL 帧缓冲区是黑色的。
关于如何解决该问题并获得当前绘制场景的可靠描述有什么想法吗?
如何获取可靠的 QGLWidget 快照
将当前场景渲染到帧缓冲区,将帧缓冲区中的数据保存到文件。或者在 glFlush 之后获取当前的后备缓冲区。其他任何内容都可能包括伪影或不完整的场景。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)