在Qt中使用OpenGL渲染QGraphicsScene

时间:2012-02-28 12:51:14

标签: image qt opengl render

我正在尝试将OpenGL的QGraphicsScene保存为图像(png或jpeg),但我不希望图像依赖于当前视图(缩放)。这就是为什么我不使用grabFrameBuffer而是使用render()代替:

QImage imgToSave(1024,768,QImage::Format_ARGB32_Premultiplied);
// fill the image
// and define rectbuffer(), the QRect() containing what I want to save
QPainter painter(&imgToSave);
m_scene = new QGraphicsScene;
// fill the Scene
m_scene->render(&painter,imgToSave.rect(),rectbuffer());

确实有效。我的问题是:它是否使用OpenGL功能? 如果没有,该怎么做?

n.b。 :我正在使用QGLWidget作为我的GraphicsView的视口。使用OpenGL的显示器正在工作。我担心的是图像保存。

1 个答案:

答案 0 :(得分:1)

我猜:不。因为要通过OpenGL渲染QGraphicsScene,你需要指定一个QGLWidget派生对象作为场景的视口 - 你没有,所以它几乎肯定使用光栅引擎。其次,QPainter使用你构造它的任何绘图设备作为后端,你指定了一个不使用OpenGL的直接QImage。

如果您不能/不会在QGLWidget中使用QGraphicsView,那么您可能能够呈现到QGLFramebufferObject。但这带来了它自身的复杂性,即你必须事先创造一个隐藏的背景。