compile again
authorGunnar Sletta <gunnar.sletta@nokia.com>
Thu, 8 Sep 2011 10:37:36 +0000 (12:37 +0200)
committerSamuel Rødal <samuel.rodal@nokia.com>
Thu, 8 Sep 2011 11:26:51 +0000 (13:26 +0200)
Change-Id: If041994fdadcd24f9b002bbcf76ce50f3b56ce87
Reviewed-on: http://codereview.qt-project.org/4431
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
src/declarative/scenegraph/util/qsgpainternode.cpp
src/declarative/scenegraph/util/qsgpainternode_p.h

index 9a02d8b..90d66c0 100644 (file)
@@ -45,6 +45,7 @@
 #include <private/qsgcontext_p.h>
 #include <qopenglframebufferobject.h>
 #include <qopenglfunctions.h>
+#include <qopenglpaintdevice.h>
 #include <qmath.h>
 #include <qpainter.h>
 
@@ -111,6 +112,7 @@ QSGPainterNode::QSGPainterNode(QSGPaintedItem *item)
     , 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)
@@ -135,6 +137,7 @@ QSGPainterNode::~QSGPainterNode()
     delete m_texture;
     delete m_fbo;
     delete m_multisampledFbo;
+    delete m_gl_device;
 }
 
 void QSGPainterNode::paint()
@@ -144,10 +147,17 @@ 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
@@ -178,6 +188,11 @@ void QSGPainterNode::paint()
         QOpenGLFramebufferObject::blitFramebuffer(m_fbo, dirtyRect, m_multisampledFbo, dirtyRect);
     }
 
+    if (m_multisampledFbo)
+        m_multisampledFbo->release();
+    else if (m_fbo)
+        m_fbo->release();
+
     m_dirtyRect = QRect();
 }
 
index c14e770..435e86e 100644 (file)
@@ -56,6 +56,7 @@ QT_BEGIN_NAMESPACE
 QT_MODULE(Declarative)
 
 class QOpenGLFramebufferObject;
+class QOpenGLPaintDevice;
 
 class Q_DECLARATIVE_EXPORT QSGPainterTexture : public QSGPlainTexture
 {
@@ -125,6 +126,7 @@ private:
     QSGTextureMaterial m_materialO;
     QSGGeometry m_geometry;
     QSGPainterTexture *m_texture;
+    QOpenGLPaintDevice *m_gl_device;
 
     QSize m_size;
     QSize m_fboSize;