diff options
-rw-r--r-- | src/runtime/q3dspresentation.h | 3 | ||||
-rw-r--r-- | src/runtime/q3dsscenemanager.cpp | 21 |
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); |