gpt4 book ai didi

c++ - 如何获取可靠的 QGLWidget 快照

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:07 25 4
gpt4 key购买 nike

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

  • 当只有覆盖层发生变化时,不会一直重绘场景,而是使用缓存的像素图
  • 让用户截取特定图(3D 场景)的屏幕截图

我尝试的第一件事是 grabFrameBuffer()。对于第一个应用程序来说使用这个功能是很自然的,widget中当前可见的正是我要缓存的。问题:在某些硬件上(例如 Intel 集成显卡、带有 GeForce 显卡的 Mac OS X),获取的图像不包含当前屏幕内容,而是包含之前的内容。因此,如果场景将被绘制两次,在屏幕上您会看到第二张图,在图像中您会看到第一张图(这应该是后台缓冲区的内容?)。

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

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

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

最佳答案

How to take reliable QGLWidget snapshot

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

关于c++ - 如何获取可靠的 QGLWidget 快照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10429452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com