commit 3c5084ed523067f81e93f474fdba2beaf874f53f Author: Gareth Stockwell Date: Mon Sep 5 13:34:51 2011 +0100 Ensure effect changes are propagated to the QGLSceneNode Task-number: QTBUG-21291 Reviewed-by: PENDING diff --git a/src/quick3d/qdeclarativeeffect.cpp b/src/quick3d/qdeclarativeeffect.cpp index 70ecdb8..573fe47 100644 --- a/src/quick3d/qdeclarativeeffect.cpp +++ b/src/quick3d/qdeclarativeeffect.cpp @@ -341,8 +341,9 @@ QGLMaterial *QDeclarativeEffect::material() const void QDeclarativeEffect::setMaterial(QGLMaterial *value) { d->ensureMaterial(); - - int newIndex = d->palette->addMaterial(value); + int newIndex = -1; + if (value) + newIndex = d->palette->addMaterial(value); if (newIndex != d->materialIndex) { d->materialIndex = newIndex; diff --git a/src/quick3d/qdeclarativeitem3d.cpp b/src/quick3d/qdeclarativeitem3d.cpp index 1f7949c..8b1c8db 100644 --- a/src/quick3d/qdeclarativeitem3d.cpp +++ b/src/quick3d/qdeclarativeitem3d.cpp @@ -867,11 +867,11 @@ void QDeclarativeItem3D::setEffect(QDeclarativeEffect *value) if (d->effect == value) return; if (d->effect) - disconnect(d->effect, SIGNAL(effectChanged()), this, SLOT(update())); + disconnect(d->effect, SIGNAL(effectChanged()), this, SLOT(handleEffectChanged())); d->effect = value; if (d->effect) { - connect(d->effect, SIGNAL(effectChanged()), this, SLOT(update())); + connect(d->effect, SIGNAL(effectChanged()), this, SLOT(handleEffectChanged())); d->requireBlockingEffectsCheck = true; } emit effectChanged(); @@ -1318,6 +1318,12 @@ bool QDeclarativeItem3D::event(QEvent *e) return QObject::event(e); } +void QDeclarativeItem3D::handleEffectChanged() +{ + d->requireBlockingEffectsCheck = true; + update(); +} + /*! \qmlproperty string Item3D::meshNode diff --git a/src/quick3d/qdeclarativeitem3d.h b/src/quick3d/qdeclarativeitem3d.h index 1462094..5a49053 100644 --- a/src/quick3d/qdeclarativeitem3d.h +++ b/src/quick3d/qdeclarativeitem3d.h @@ -168,6 +168,9 @@ protected: virtual void drawItem(QGLPainter *painter); bool event(QEvent *e); +private Q_SLOTS: + void handleEffectChanged(); + Q_SIGNALS: void positionChanged(); void scaleChanged();