Визуализация QGraphicsScene с использованием OpenGL в Qt - PullRequest
4 голосов
/ 28 февраля 2012

Я пытаюсь сохранить QGraphicsScene с OpenGL как изображение (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 или нет?Если нет, то как это сделать?

Примечание: я использую QGLWidget в качестве области просмотра для моего GraphicsView.И дисплей с использованием OpenGL работает.Мои опасения связаны с сохранением изображения.

1 Ответ

1 голос
/ 28 февраля 2012

Я собираюсь угадать: нет.Потому что для QGraphicsScene для рендеринга через OpenGL вам нужно указать производный объект QGLWidget в качестве области просмотра сцены - вы этого не сделали, поэтому он почти наверняка использует растровый движок.Во-вторых, QPainter использует любое устройство рисования, с которым вы его строите, в качестве бэкэнда, вы указали прямой QImage, который не использует OpenGL.

Если вы не можете / не будете использовать QGLWidget через QGraphicsView, тогда вы можете иметь возможность рендерить на QGLFramebufferObject.Но это приносит свои сложности, а именно: вам придется заранее создать скрытый контекст.

...