Маленькая версия моего вопроса
В функции QGraphicsItem :: paint () у меня есть QGLFrameBufferObject.Как я могу получить это на устройстве рисования художника, который передается в качестве аргумента?(при условии, что QGraphicsItem находится в сцене, которая визуализируется QGraphicsView, который имеет QGLWidget в качестве viewport => painter использует движок opengl)
QGraphicsItem::paint(QPainter* painter, ...)
{
QGLFramebufferObject fbo;
QPainter p(fbo);
... // Some painting code on the fbo
p.end();
// What now? How to get the fbo content drawn on the painter?
}
Я посмотрел на примеры кадрового буфера и pbuffer, предоставленные сQt.Там fbo / pbuffer рисуется в QGLWidget с использованием пользовательского кода opengl.Можно ли сделать то же самое в методе paint () объекта QGraphicsItem и принять во внимание положение QGraphisItem в сцене / представлении?
Большая версия моего вопроса
Ситуацияsketch
У меня есть QGraphicsScene.В нем есть элемент, имеющий QGraphicsEffect (собственная реализация путем переопределения draw () из QGraphicsEffect).Сцена визуализируется с помощью QGraphicsView, который имеет QGLWidget в качестве области просмотра.
В QGraphicsEffect :: draw (QPainter *) мне нужно сгенерировать некоторое растровое изображение, которое я затем хочу нарисовать, используя предоставленный художник (художник имеетQGLWidget как paintdevice).Создание растрового изображения - это комбинация некоторых вызовов отрисовки, и я хочу, чтобы они выполнялись аппаратно.
Упрощенный пример: (я не вызываю sourcepixmap в моем методе draw (), так как он не нужен для демонстрации моегопроблема)
class OwnGraphicsEffect: public QGraphicsEffect
{
virtual void draw(QPainter* painter);
}
void OwnGraphicsEffect::draw(QPainter* painter)
{
QRect rect(0,0,100,100);
QGLPixelBuffer pbuffer(rect.size(), QGLFormat(QGL::Rgba));
QPainter p(pbuffer);
p.fillRect(rect, Qt::transparent);
p.end();
painter->drawImage(QPoint(0,0), pbuffer->toImage(),rect);
}
Актуальная проблема
Моя проблема связана с последней строкой моего кода: pbuffer-> toImage ().Я не хочу использовать это.Я не хочу иметь преобразование QImage из-за соображений производительности.Есть ли способ получить растровое изображение из моего glpixelbuffer и затем использовать painter-> drawpixmap ()?
Я знаю, что я также могу скопировать pbuffer в текстуру, используя:
GLuint dynamicTexture = pbuffer.generateDynamicTexture();
pbuffer.updateDynamicTexture(dynamicTexture);
но я понятия не имею, как передать эту текстуру «художнику».