#include <private/qsgcontext_p.h>
#include <qopenglframebufferobject.h>
#include <qopenglfunctions.h>
+#include <qopenglpaintdevice.h>
#include <qmath.h>
#include <qpainter.h>
, m_multisampledFbo(0)
, m_geometry(QSGGeometry::defaultAttributes_TexturedPoint2D(), 4)
, m_texture(0)
+ , m_gl_device(0)
, m_size(1, 1)
, m_dirtyContents(false)
, m_opaquePainting(false)
delete m_texture;
delete m_fbo;
delete m_multisampledFbo;
+ delete m_gl_device;
}
void QSGPainterNode::paint()
QPainter painter;
if (m_actualRenderTarget == QSGPaintedItem::Image)
painter.begin(&m_image);
- else if (m_multisampledFbo)
- painter.begin(m_multisampledFbo);
- else
- painter.begin(m_fbo);
+ else {
+ if (!m_gl_device)
+ m_gl_device = new QOpenGLPaintDevice(m_fboSize);
+
+ if (m_multisampledFbo)
+ m_multisampledFbo->bind();
+ else
+ m_fbo->bind();
+
+ painter.begin(m_gl_device);
+ }
if (m_smoothPainting) {
painter.setRenderHints(QPainter::Antialiasing | QPainter::HighQualityAntialiasing
QOpenGLFramebufferObject::blitFramebuffer(m_fbo, dirtyRect, m_multisampledFbo, dirtyRect);
}
+ if (m_multisampledFbo)
+ m_multisampledFbo->release();
+ else if (m_fbo)
+ m_fbo->release();
+
m_dirtyRect = QRect();
}
QT_MODULE(Declarative)
class QOpenGLFramebufferObject;
+class QOpenGLPaintDevice;
class Q_DECLARATIVE_EXPORT QSGPainterTexture : public QSGPlainTexture
{
QSGTextureMaterial m_materialO;
QSGGeometry m_geometry;
QSGPainterTexture *m_texture;
+ QOpenGLPaintDevice *m_gl_device;
QSize m_size;
QSize m_fboSize;