aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/particles/qquickcustomparticle_p.h
diff options
context:
space:
mode:
authorKim Motoyoshi Kalland <kim.kalland@nokia.com>2012-03-21 14:21:51 +0100
committerQt by Nokia <qt-info@nokia.com>2012-04-04 03:29:45 +0200
commitc71c8c4619594a276d69378bbd77da5117afd566 (patch)
tree9b8ac6fb0db75abb747de6ec2a74e754770f4820 /src/quick/particles/qquickcustomparticle_p.h
parent2c741bc8af46aa26ec9a61bc996bb0de2e409943 (diff)
Fixed crash when using 'var' property in ShaderEffect.
Also made CustomParticle and ShaderEffect share some code. Task-number: QTBUG-23924 Change-Id: I975f71f031b379cf5e29302a9c931e4ead5437ea Reviewed-by: Alan Alpert <alan.alpert@nokia.com>
Diffstat (limited to 'src/quick/particles/qquickcustomparticle_p.h')
-rw-r--r--src/quick/particles/qquickcustomparticle_p.h48
1 files changed, 23 insertions, 25 deletions
diff --git a/src/quick/particles/qquickcustomparticle_p.h b/src/quick/particles/qquickcustomparticle_p.h
index e04ac704d0..f689091268 100644
--- a/src/quick/particles/qquickcustomparticle_p.h
+++ b/src/quick/particles/qquickcustomparticle_p.h
@@ -43,6 +43,7 @@
#define CUSTOM_PARTICLE_H
#include "qquickparticlepainter_p.h"
#include <private/qquickshadereffectnode_p.h>
+#include <private/qquickshadereffect_p.h>
#include <QSignalMapper>
QT_BEGIN_HEADER
@@ -65,53 +66,50 @@ public:
explicit QQuickCustomParticle(QQuickItem* parent=0);
~QQuickCustomParticle();
- QByteArray fragmentShader() const { return m_source.fragmentCode; }
+ QByteArray fragmentShader() const { return m_common.source.sourceCode[Key::FragmentShader]; }
void setFragmentShader(const QByteArray &code);
- QByteArray vertexShader() const { return m_source.vertexCode; }
+ QByteArray vertexShader() const { return m_common.source.sourceCode[Key::VertexShader]; }
void setVertexShader(const QByteArray &code);
-public Q_SLOTS:
- void updateData();
- void changeSource(int);
+
Q_SIGNALS:
void fragmentShaderChanged();
void vertexShaderChanged();
+
protected:
virtual void initialize(int gIdx, int pIdx);
virtual void commit(int gIdx, int pIdx);
QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *);
- void prepareNextFrame();
- void setSource(const QVariant &var, int index);
- void disconnectPropertySignals();
- void connectPropertySignals();
+ QQuickShaderEffectNode *prepareNextFrame(QQuickShaderEffectNode *rootNode);
void reset();
void resize(int oldCount, int newCount);
- void updateProperties();
- void lookThroughShaderCode(const QByteArray &code);
virtual void componentComplete();
QQuickShaderEffectNode *buildCustomNodes();
- void performPendingResize();
void sceneGraphInvalidated();
+ void itemChange(ItemChange change, const ItemChangeData &value);
+
+private Q_SLOTS:
+ void sourceDestroyed(QObject *object);
+ void propertyChanged(int mappedId);
private:
- void buildData();
-
- bool m_dirtyData;
- QQuickShaderEffectProgram m_source;
- struct SourceData
- {
- QSignalMapper *mapper;
- QPointer<QQuickItem> item;
- QByteArray name;
- };
- QVector<SourceData> m_sources;
- QQuickShaderEffectMaterialObject *m_material;
- QQuickShaderEffectNode* m_rootNode;
+ typedef QQuickShaderEffectMaterialKey Key;
+ typedef QQuickShaderEffectMaterial::UniformData UniformData;
+
+ void buildData(QQuickShaderEffectNode *rootNode);
+ void updateVertexShader();
+
+ QQuickShaderEffectCommon m_common;
+
QHash<int, QQuickShaderEffectNode*> m_nodes;
qreal m_lastTime;
+ uint m_dirtyUniforms : 1;
+ uint m_dirtyUniformValues : 1;
+ uint m_dirtyTextureProviders : 1;
+ uint m_dirtyProgram : 1;
};
QT_END_NAMESPACE