summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@qt.io>2018-01-10 10:31:23 +0100
committerLaszlo Agocs <laszlo.agocs@qt.io>2018-01-10 12:28:22 +0000
commit350c999b55d27b8ea23146e0a69f4155168826ba (patch)
treee14e0822e793e2ba28bc3a61929f262f3ba0d5b3
parent9dcbce5bfe4977a65b21e5eb593878cc14db8252 (diff)
Make effect properties animatable
Task-number: QT3DS-794 Change-Id: I910fcabd0eeda0ed5e758ea42aa5ec60b4b31b7a Reviewed-by: Andy Nichols <andy.nichols@qt.io>
-rw-r--r--src/runtime/q3dspresentation.h3
-rw-r--r--src/runtime/q3dsscenemanager.cpp21
2 files changed, 23 insertions, 1 deletions
diff --git a/src/runtime/q3dspresentation.h b/src/runtime/q3dspresentation.h
index e45277a..a2af002 100644
--- a/src/runtime/q3dspresentation.h
+++ b/src/runtime/q3dspresentation.h
@@ -162,7 +162,8 @@ public:
DefaultMaterialDirty = 0x200,
ImageDirty = 0x400,
LayerDirty = 0x800,
- CustomMaterialDirty = 0x1000
+ CustomMaterialDirty = 0x1000,
+ EffectDirty = 0x2000
};
Q_DECLARE_FLAGS(DirtyFlags, DirtyFlag)
diff --git a/src/runtime/q3dsscenemanager.cpp b/src/runtime/q3dsscenemanager.cpp
index d5a5c22..151510e 100644
--- a/src/runtime/q3dsscenemanager.cpp
+++ b/src/runtime/q3dsscenemanager.cpp
@@ -4647,6 +4647,12 @@ void Q3DSSceneManager::handlePropertyChange(Q3DSGraphObject *obj, const QSet<QSt
data->changeFlags |= cf;
}
break;
+ case Q3DSGraphObject::Effect:
+ {
+ data->dirty |= Q3DSGraphObjectAttached::EffectDirty;
+ data->changeFlags |= cf;
+ }
+ break;
case Q3DSGraphObject::Image:
{
data->dirty |= Q3DSGraphObjectAttached::ImageDirty;
@@ -4850,6 +4856,10 @@ static void markLayerForObjectDirty(Q3DSGraphObject *obj)
Q3DSLayerNode *layer3DS = findLayerForMat(obj);
if (layer3DS)
markLayerDirty(layer3DS);
+ } else if (obj->type() == Q3DSGraphObject::Effect) {
+ Q3DSEffectAttached *data = static_cast<Q3DSEffectAttached *>(obj->attached());
+ if (data && data->layer3DS)
+ markLayerDirty(data->layer3DS);
}
}
@@ -4983,6 +4993,17 @@ void Q3DSSceneManager::updateSubTreeRecursive(Q3DSGraphObject *obj)
}
}
break;
+ case Q3DSGraphObject::Effect:
+ {
+ Q3DSEffectInstance *eff3DS = static_cast<Q3DSEffectInstance *>(obj);
+ Q3DSEffectAttached *data = static_cast<Q3DSEffectAttached *>(eff3DS->attached());
+ if (data && (data->dirty & Q3DSGraphObjectAttached::EffectDirty)) {
+ updateEffect(eff3DS);
+ m_wasDirty = true;
+ markLayerForObjectDirty(eff3DS);
+ }
+ }
+ break;
case Q3DSGraphObject::Image:
{
Q3DSImage *image3DS = static_cast<Q3DSImage *>(obj);