Dereference the QImage once the corresponding texture is bound.
authorMichael Brasser <michael.brasser@live.com>
Sat, 26 Jan 2013 03:00:15 +0000 (21:00 -0600)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Fri, 1 Feb 2013 19:56:48 +0000 (20:56 +0100)
We do not require a reference here, as the texture is only bound
once. It is the texture factory that is reused (when
QQuickWIndow::setPersistentSceneGraph(false) is set and the window
is hidden and then re-exposed). With this patch it becomes trivial to
create a custom QSGContextPlugin with a texture factory that does
not retain the QImage, freeing up memory. This is useful in the
case of an embedded system with only a single window that
is never hidden or re-exposed.

Change-Id: I1cfa6efc3a2e9e641b456bf90c55d563061757b8
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
src/quick/scenegraph/util/qsgpainternode.cpp
src/quick/scenegraph/util/qsgtexture.cpp
src/quick/scenegraph/util/qsgtexture_p.h

index 2d536ea..a6b0c32 100644 (file)
@@ -70,7 +70,7 @@ static inline int qt_next_power_of_two(int v)
 QSGPainterTexture::QSGPainterTexture()
     : QSGPlainTexture()
 {
-
+    m_retain_image = true;
 }
 
 #ifdef QT_OPENGL_ES
index c6a5672..e06f075 100644 (file)
@@ -519,6 +519,7 @@ QSGPlainTexture::QSGPlainTexture()
     , m_dirty_bind_options(false)
     , m_owns_texture(true)
     , m_mipmaps_generated(false)
+    , m_retain_image(false)
 {
 }
 
@@ -713,6 +714,8 @@ void QSGPlainTexture::bind()
     m_texture_rect = QRectF(0, 0, 1, 1);
 
     m_dirty_bind_options = false;
+    if (!m_retain_image)
+        m_image = QImage();
 }
 
 
index ed1d782..6430a93 100644 (file)
@@ -112,6 +112,7 @@ protected:
     uint m_dirty_bind_options : 1;
     uint m_owns_texture : 1;
     uint m_mipmaps_generated : 1;
+    uint m_retain_image: 1;
 };
 
 QT_END_NAMESPACE