Don't accidentally use atlas images in particle nodes
authorGunnar Sletta <gunnar.sletta@nokia.com>
Wed, 5 Oct 2011 10:51:38 +0000 (12:51 +0200)
committerQt by Nokia <qt-info@nokia.com>
Wed, 5 Oct 2011 12:31:40 +0000 (14:31 +0200)
Change-Id: I3058d9262bbc32c873ba26e51b04668f89ed060a
Reviewed-on: http://codereview.qt-project.org/6039
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Kim M. Kalland <kim.kalland@nokia.com>
src/declarative/particles/qsgimageparticle.cpp
src/declarative/scenegraph/util/qsgtexture_p.h

index f0304b4..3646506 100644 (file)
@@ -51,6 +51,7 @@
 #include "qsgspriteengine_p.h"
 #include <QOpenGLFunctions>
 #include <qsgengine.h>
+#include <private/qsgtexture_p.h>
 
 QT_BEGIN_NAMESPACE
 //###Switch to define later, for now user-friendly (no compilation) debugging is worth it
@@ -1137,7 +1138,7 @@ QSGGeometryNode* QSGImageParticle::buildParticleNodes()
         if (colortable.isNull())
             colortable = QImage(QStringLiteral(":defaultshaders/identitytable.png"));
         Q_ASSERT(!colortable.isNull());
-        getState<ImageMaterialData>(m_material)->colorTable = sceneGraphEngine()->createTextureFromImage(colortable);
+        getState<ImageMaterialData>(m_material)->colorTable = QSGPlainTexture::fromImage(colortable);
         fillUniformArrayFromImage(getState<ImageMaterialData>(m_material)->sizeTable, sizetable, UNIFORM_ARRAY_SIZE);
         fillUniformArrayFromImage(getState<ImageMaterialData>(m_material)->opacityTable, opacitytable, UNIFORM_ARRAY_SIZE);
     case Deformable:
@@ -1149,7 +1150,7 @@ QSGGeometryNode* QSGImageParticle::buildParticleNodes()
     default://Also Simple
         if (!m_material)
             m_material = SimpleMaterial::createMaterial();
-        getState<ImageMaterialData>(m_material)->texture = sceneGraphEngine()->createTextureFromImage(image);
+        getState<ImageMaterialData>(m_material)->texture = QSGPlainTexture::fromImage(image);
         getState<ImageMaterialData>(m_material)->texture->setFiltering(QSGTexture::Linear);
         getState<ImageMaterialData>(m_material)->entry = (qreal) m_entryEffect;
         m_material->setFlag(QSGMaterial::Blending);
index 460c0e8..f14508f 100644 (file)
@@ -92,6 +92,12 @@ public:
 
     virtual void bind();
 
+    static QSGPlainTexture *fromImage(const QImage &image) {
+        QSGPlainTexture *t = new QSGPlainTexture();
+        t->setImage(image);
+        return t;
+    }
+
 protected:
     QImage m_image;