gpt4 book ai didi

C++,Qt5 : grabFrameBuffer results are wrong when using multisampling

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

我想实现一个功能,将OpenGLWidget显示的内容保存到一个图片文件中。

我正在使用以下代码来保存图像:

ui->gl_widget->grabFramebuffer().save("/foo/bar.png");

只要我不使用多重采样,它就可以正常工作,但是如果我将这一行添加到我的初始化中,我只会得到看起来很奇怪的结果:

QSurfaceFormat format;
...
format.setSamples(4);
...

enter image description here

此外,多次渲染静态场景会产生不同的图像。

我正在使用 Qt5.6.0 和 OpenGL 3.3(核心配置文件)。

你能帮我找出问题所在吗?我现在搜索了很长时间,但不知道是什么导致了这个问题。

提前致谢!

最佳答案

获取小部件的帧缓冲区并不是很可靠。即使没有多重采样,在某些操作系统上,您也可能无法获得当前帧,而是之前的帧等。您看到的基本上是未初始化的内存。

我的解决方法是改为绘制到帧缓冲区对象中:

QGLFramebufferObject b(width, height);
QPainter p(&b);
bool success = drawScene(&p);

if (!success)
return;

QImage img = b.toImage();

您可能需要稍微重构您的代码,但它具有其他优势(例如,选择自定义分辨率、画家的不同质量设置等)。

你可以在这里找到我的老问题:How to take reliable QGLWidget snapshot

关于C++,Qt5 : grabFrameBuffer results are wrong when using multisampling,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38728154/

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