diff options
Diffstat (limited to 'src/runtime/q3dsscenemanager_p.h')
-rw-r--r-- | src/runtime/q3dsscenemanager_p.h | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/src/runtime/q3dsscenemanager_p.h b/src/runtime/q3dsscenemanager_p.h index d569284..25f91c8 100644 --- a/src/runtime/q3dsscenemanager_p.h +++ b/src/runtime/q3dsscenemanager_p.h @@ -434,7 +434,7 @@ public: Qt3DRender::QMaterial *materialComponent = nullptr; Q3DSGraphObject *material = nullptr; // Default, Custom, Referenced Q3DSGraphObject *resolvedMaterial = nullptr; // Default, Custom normally, but can still be Referenced for invalid refs - Q3DSReferencedMaterial *referencedMaterial = nullptr; // When valid, there are some overrides possible by referenced material + Q3DSReferencedMaterial *referencingMaterial = nullptr; // When valid, there are some overrides possible by referenced material Qt3DCore::QEntity *entity = nullptr; bool hasTransparency = false; }; @@ -460,15 +460,24 @@ struct Q3DSTextureParameters class Q3DSMaterialAttached : public Q3DSGraphObjectAttached { public: - Q3DSModelNode *model3DS = nullptr; - float opacity = 1.0f; + // One default or custom material may be associated with multiple models + // when a ReferencedMaterial is used. + struct PerModelData { + float combinedOpacity = 1.0f; + union { + Qt3DRender::QParameter *materialDiffuseParam; + Qt3DRender::QParameter *objectOpacityParam; + }; + }; + QHash<Q3DSModelNode *, PerModelData> perModelData; }; +Q_DECLARE_TYPEINFO(Q3DSMaterialAttached::PerModelData, Q_MOVABLE_TYPE); + class Q3DSDefaultMaterialAttached : public Q3DSMaterialAttached { public: Qt3DRender::QParameter *diffuseParam = nullptr; - Qt3DRender::QParameter *materialDiffuseParam = nullptr; Qt3DRender::QParameter *materialPropertiesParam = nullptr; Qt3DRender::QParameter *specularParam = nullptr; Qt3DRender::QParameter *fresnelPowerParam = nullptr; @@ -522,7 +531,6 @@ class Q3DSCustomMaterialAttached : public Q3DSMaterialAttached { public: QHash<QString, Q3DSCustomPropertyParameter> params; - Qt3DRender::QParameter *objectOpacityParam = nullptr; // Lightmaps Q3DSTextureParameters lightmapIndirectParams; Q3DSTextureParameters lightmapRadiosityParams; @@ -573,7 +581,6 @@ public: Q3DSSlidePlayer *slidePlayer = nullptr; Qt3DAnimation::QClipAnimator *animator = nullptr; QVector<Qt3DAnimation::QClipAnimator *> animators; - QSet<Q3DSNode *> needsMasterRollback; }; class Q3DSImageAttached : public Q3DSGraphObjectAttached @@ -778,8 +785,8 @@ private: QVector<Qt3DRender::QParameter *> prepareCustomMaterial(Q3DSCustomMaterialInstance *m, Q3DSReferencedMaterial *rm, Q3DSModelNode *model3DS); void setImageTextureFromSubPresentation(Qt3DRender::QParameter *sampler, Q3DSImage *image); void updateTextureParameters(Q3DSTextureParameters &textureParameters, Q3DSImage *image); - void updateDefaultMaterial(Q3DSDefaultMaterial *m, Q3DSReferencedMaterial *rm = nullptr); - void updateCustomMaterial(Q3DSCustomMaterialInstance *m, Q3DSReferencedMaterial *rm = nullptr); + void updateDefaultMaterial(Q3DSDefaultMaterial *m, Q3DSReferencedMaterial *rm, Q3DSModelNode *model3DS); + void updateCustomMaterial(Q3DSCustomMaterialInstance *m, Q3DSReferencedMaterial *rm, Q3DSModelNode *model3DS); void buildEffect(Q3DSEffectInstance *eff3DS, Q3DSLayerNode *layer3DS); void updateEffectStatus(Q3DSLayerNode *layer3DS); void ensureEffectSource(Q3DSLayerNode *layer3DS); @@ -846,8 +853,7 @@ private: Q3DSTextRenderer *m_textRenderer; QSet<Q3DSGraphObject *> m_subTreeWithDirtyLights; QSet<Q3DSDefaultMaterial *> m_pendingDefMatRebuild; - QSet<Q3DSNode *> m_pendingNodeShow; - QSet<Q3DSNode *> m_pendingNodeHide; + QHash<Q3DSNode *, bool> m_pendingNodeVisibility; Qt3DRender::QLayer *m_fsQuadTag = nullptr; QStack<Q3DSComponentNode *> m_componentNodeStack; QSet<Q3DSLayerNode *> m_pendingSubPresLayers; |