summaryrefslogtreecommitdiffstats
path: root/src/graphs3d
diff options
context:
space:
mode:
authorSakaria Pouke <[email protected]>2025-05-21 12:22:43 +0300
committerSami Varanka <[email protected]>2025-06-01 09:19:10 +0300
commit52a361988d84ed893ac4cea36fe11e49d2c58fa5 (patch)
treedf1f384507d2700ce4ffcff7babe57cbc5e6883f /src/graphs3d
parent65f74386ef747a1ac6c0d223191cc20aa2feb718 (diff)
Add unlit shading to 3d graphsHEADdev
Fixes: QTBUG-136978 Change-Id: I57dc414e28742b5cce2ed6facae745ce90881a99 Reviewed-by: Sami Varanka <[email protected]>
Diffstat (limited to 'src/graphs3d')
-rw-r--r--src/graphs3d/data/qabstract3dseries.cpp59
-rw-r--r--src/graphs3d/data/qabstract3dseries.h11
-rw-r--r--src/graphs3d/data/qabstract3dseries_p.h6
-rw-r--r--src/graphs3d/engine/shaders/bars.frag8
-rw-r--r--src/graphs3d/engine/shaders/barsinstancing.frag8
-rw-r--r--src/graphs3d/engine/shaders/scatter.frag8
-rw-r--r--src/graphs3d/engine/shaders/scatterinstancing.frag8
-rw-r--r--src/graphs3d/engine/shaders/surface.frag8
-rw-r--r--src/graphs3d/qml/qquickgraphsbars.cpp12
-rw-r--r--src/graphs3d/qml/qquickgraphsbars_p.h1
-rw-r--r--src/graphs3d/qml/qquickgraphsitem.cpp8
-rw-r--r--src/graphs3d/qml/qquickgraphsitem_p.h1
-rw-r--r--src/graphs3d/qml/qquickgraphsscatter.cpp31
-rw-r--r--src/graphs3d/qml/qquickgraphsscatter_p.h5
-rw-r--r--src/graphs3d/qml/qquickgraphssurface.cpp15
-rw-r--r--src/graphs3d/qml/qquickgraphssurface_p.h2
-rw-r--r--src/graphs3d/qml/resources/BarsMaterial.qml2
-rw-r--r--src/graphs3d/qml/resources/BarsMaterialInstancing.qml2
-rw-r--r--src/graphs3d/qml/resources/ScatterMaterial.qml2
-rw-r--r--src/graphs3d/qml/resources/ScatterMaterialInstancing.qml2
-rw-r--r--src/graphs3d/qml/resources/SurfaceMaterial.qml2
21 files changed, 194 insertions, 7 deletions
diff --git a/src/graphs3d/data/qabstract3dseries.cpp b/src/graphs3d/data/qabstract3dseries.cpp
index 28c86e37..f2d8930a 100644
--- a/src/graphs3d/data/qabstract3dseries.cpp
+++ b/src/graphs3d/data/qabstract3dseries.cpp
@@ -60,6 +60,7 @@ QT_BEGIN_NAMESPACE
* Series type for Q3DSurfaceWidgetItem.
*/
+
/*!
* \enum QAbstract3DSeries::Mesh
*
@@ -94,6 +95,17 @@ QT_BEGIN_NAMESPACE
*/
/*!
+ * \enum QAbstract3DSeries::LightingMode
+ *
+ * Predefined lighting modes
+ *
+ * \value Shaded
+ * Graphs respond to real time lighting
+ * \value Unshaded
+ * Graphs do not respond to real time lighting
+ */
+
+/*!
* \qmlproperty Abstract3DSeries.SeriesType Abstract3DSeries::type
* The type of the series. One of the QAbstract3DSeries::SeriesType values.
*
@@ -217,6 +229,16 @@ QT_BEGIN_NAMESPACE
*/
/*!
+ * \qmlproperty Abstract3DSeries.LightingMode Abstract3DSeries::lightingMode
+ * \since 6.10
+ *
+ * Sets the lightingMode of the items in the series.
+ * The default value is \l{QAbstract3DSeries::LightingMode::Shaded}
+ *
+ * \sa QAbstract3DSeries::LightingMode
+ */
+
+/*!
* \qmlproperty string Abstract3DSeries::name
*
* The series name.
@@ -320,6 +342,12 @@ QT_BEGIN_NAMESPACE
This signal is emitted when multiHighlightGradient changes to \a gradient.
*/
/*!
+ \qmlsignal Abstract3DSeries::lightingModeChanged(Abstract3DSeries.LightingMode lightingMode)
+
+ This signal is emitted when \l lightingMode changes to \a lightingMode.
+ \since 6.10
+*/
+/*!
\qmlsignal Abstract3DSeries::nameChanged(string name)
This signal is emitted when \l name changes to \a name.
@@ -748,6 +776,28 @@ QLinearGradient QAbstract3DSeries::multiHighlightGradient() const
}
/*!
+ * \property QAbstract3DSeries::lightingMode
+ *
+ * \brief The LightingMode of the series
+ * \since 6.10
+ *
+ */
+void QAbstract3DSeries::setLightingMode(QAbstract3DSeries::LightingMode LightingMode)
+{
+ Q_D(QAbstract3DSeries);
+ if (d->m_lightingMode != LightingMode) {
+ d->setLightingMode(LightingMode);
+ emit lightingModeChanged(LightingMode);
+ }
+}
+
+QAbstract3DSeries::LightingMode QAbstract3DSeries::lightingMode() const
+{
+ Q_D(const QAbstract3DSeries);
+ return d->m_lightingMode;
+}
+
+/*!
* \property QAbstract3DSeries::name
*
* \brief The series name.
@@ -837,6 +887,7 @@ QAbstract3DSeriesPrivate::QAbstract3DSeriesPrivate(QAbstract3DSeries::SeriesType
, m_multiHighlightColor(Qt::black)
, m_itemLabelDirty(true)
, m_itemLabelVisible(true)
+ , m_lightingMode(QAbstract3DSeries::LightingMode::Shaded)
{}
QAbstract3DSeriesPrivate::~QAbstract3DSeriesPrivate() {}
@@ -990,6 +1041,14 @@ void QAbstract3DSeriesPrivate::setMultiHighlightGradient(const QLinearGradient &
m_graph->markSeriesVisualsDirty();
}
+void QAbstract3DSeriesPrivate::setLightingMode(QAbstract3DSeries::LightingMode lightingMode)
+{
+ m_lightingMode = lightingMode;
+ if (m_graph)
+ m_graph->markSeriesVisualsDirty();
+ m_changeTracker.lightingModeChanged = true;
+}
+
void QAbstract3DSeriesPrivate::setName(const QString &name)
{
m_name = name;
diff --git a/src/graphs3d/data/qabstract3dseries.h b/src/graphs3d/data/qabstract3dseries.h
index 1e7331fd..8db77813 100644
--- a/src/graphs3d/data/qabstract3dseries.h
+++ b/src/graphs3d/data/qabstract3dseries.h
@@ -47,6 +47,7 @@ class Q_GRAPHS_EXPORT QAbstract3DSeries : public QObject
Q_PROPERTY(QString itemLabel READ itemLabel NOTIFY itemLabelChanged)
Q_PROPERTY(bool itemLabelVisible READ isItemLabelVisible WRITE setItemLabelVisible NOTIFY
itemLabelVisibleChanged)
+ Q_PROPERTY(QAbstract3DSeries::LightingMode lightingMode READ lightingMode WRITE setLightingMode NOTIFY lightingModeChanged REVISION(6,10))
QML_NAMED_ELEMENT(Abstract3DSeries)
QML_UNCREATABLE("Uncreatable base type")
public:
@@ -74,6 +75,12 @@ public:
};
Q_ENUM(Mesh)
+ enum class LightingMode{
+ Shaded,
+ Unshaded,
+ };
+ Q_ENUM(LightingMode)
+
protected:
explicit QAbstract3DSeries(QAbstract3DSeriesPrivate &d, QObject *parent = nullptr);
@@ -116,6 +123,9 @@ public:
void setMultiHighlightGradient(const QLinearGradient &gradient);
QLinearGradient multiHighlightGradient() const;
+ QAbstract3DSeries::LightingMode lightingMode() const;
+ void setLightingMode(QAbstract3DSeries::LightingMode lightingMode);
+
void setName(const QString &name);
QString name() const;
@@ -140,6 +150,7 @@ Q_SIGNALS:
void nameChanged(const QString &name);
void itemLabelChanged(const QString &label);
void itemLabelVisibleChanged(bool visible);
+ void lightingModeChanged(QAbstract3DSeries::LightingMode lightingMode);
private:
Q_DISABLE_COPY(QAbstract3DSeries)
diff --git a/src/graphs3d/data/qabstract3dseries_p.h b/src/graphs3d/data/qabstract3dseries_p.h
index 1103adc6..fde70d3f 100644
--- a/src/graphs3d/data/qabstract3dseries_p.h
+++ b/src/graphs3d/data/qabstract3dseries_p.h
@@ -37,6 +37,7 @@ struct QAbstract3DSeriesChangeBitField
bool singleHighlightGradientChanged : 1;
bool multiHighlightColorChanged : 1;
bool multiHighlightGradientChanged : 1;
+ bool lightingModeChanged: 1;
bool nameChanged : 1;
bool itemLabelChanged : 1;
bool itemLabelVisibilityChanged : 1;
@@ -54,6 +55,7 @@ struct QAbstract3DSeriesChangeBitField
, singleHighlightGradientChanged(true)
, multiHighlightColorChanged(true)
, multiHighlightGradientChanged(true)
+ , lightingModeChanged(true)
, nameChanged(true)
, itemLabelChanged(true)
, itemLabelVisibilityChanged(true)
@@ -119,6 +121,8 @@ public:
void setItemLabelVisible(bool visible);
bool isUsingGradient();
+ void setLightingMode(QAbstract3DSeries::LightingMode mode);
+
protected:
QAbstract3DSeriesChangeBitField m_changeTracker;
QAbstract3DSeriesThemeOverrideBitField m_themeTracker;
@@ -145,6 +149,8 @@ protected:
bool m_itemLabelDirty;
bool m_itemLabelVisible;
+ QAbstract3DSeries::LightingMode m_lightingMode;
+
friend class QQuickGraphsScatter;
friend class QQuickGraphsSurface;
friend class QQuickGraphsBars;
diff --git a/src/graphs3d/engine/shaders/bars.frag b/src/graphs3d/engine/shaders/bars.frag
index 004c97fc..643ddf06 100644
--- a/src/graphs3d/engine/shaders/bars.frag
+++ b/src/graphs3d/engine/shaders/bars.frag
@@ -48,3 +48,11 @@ void SPECULAR_LIGHT()
const vec3 specularColor = vec3(specularBrightness);
SPECULAR += shine * specularColor;
}
+
+void POST_PROCESS()
+{
+ if (shaded)
+ COLOR_SUM = vec4(DIFFUSE.rgb + SPECULAR + EMISSIVE, DIFFUSE.a);
+ else
+ COLOR_SUM = diffuse;
+}
diff --git a/src/graphs3d/engine/shaders/barsinstancing.frag b/src/graphs3d/engine/shaders/barsinstancing.frag
index ea4ebe9c..041ad219 100644
--- a/src/graphs3d/engine/shaders/barsinstancing.frag
+++ b/src/graphs3d/engine/shaders/barsinstancing.frag
@@ -63,3 +63,11 @@ void SPECULAR_LIGHT()
const vec3 specularColor = vec3(specularBrightness);
SPECULAR += shine * specularColor;
}
+
+void POST_PROCESS()
+{
+ if (shaded)
+ COLOR_SUM = vec4(DIFFUSE.rgb + SPECULAR + EMISSIVE, DIFFUSE.a);
+ else
+ COLOR_SUM = diffuse;
+}
diff --git a/src/graphs3d/engine/shaders/scatter.frag b/src/graphs3d/engine/shaders/scatter.frag
index 75a2c7dc..0a6ab892 100644
--- a/src/graphs3d/engine/shaders/scatter.frag
+++ b/src/graphs3d/engine/shaders/scatter.frag
@@ -41,3 +41,11 @@ void DIRECTIONAL_LIGHT()
DIFFUSE += diffuse.rgb * directionalBrightness * LIGHT_COLOR * SHADOW_CONTRIB
* vec3(max(0.0, dot(normalize(NORMAL), TO_LIGHT_DIR)));
}
+
+void POST_PROCESS()
+{
+ if (shaded)
+ COLOR_SUM = vec4(DIFFUSE.rgb + SPECULAR + EMISSIVE, DIFFUSE.a);
+ else
+ COLOR_SUM = diffuse;
+}
diff --git a/src/graphs3d/engine/shaders/scatterinstancing.frag b/src/graphs3d/engine/shaders/scatterinstancing.frag
index 0b94892e..12512f42 100644
--- a/src/graphs3d/engine/shaders/scatterinstancing.frag
+++ b/src/graphs3d/engine/shaders/scatterinstancing.frag
@@ -44,3 +44,11 @@ void DIRECTIONAL_LIGHT()
DIFFUSE += diffuse.rgb * directionalBrightness * LIGHT_COLOR * SHADOW_CONTRIB
* vec3(max(0.0, dot(normalize(NORMAL), TO_LIGHT_DIR)));
}
+
+void POST_PROCESS()
+{
+ if (shaded)
+ COLOR_SUM = vec4(DIFFUSE.rgb + SPECULAR + EMISSIVE, DIFFUSE.a);
+ else
+ COLOR_SUM = diffuse;
+}
diff --git a/src/graphs3d/engine/shaders/surface.frag b/src/graphs3d/engine/shaders/surface.frag
index 480afc51..50f3ab10 100644
--- a/src/graphs3d/engine/shaders/surface.frag
+++ b/src/graphs3d/engine/shaders/surface.frag
@@ -78,3 +78,11 @@ void SPECULAR_LIGHT()
const vec3 specularColor = vec3(specularBrightness);
SPECULAR += shine * specularColor;
}
+
+void POST_PROCESS()
+{
+ if (shaded)
+ COLOR_SUM = vec4(DIFFUSE.rgb + SPECULAR + EMISSIVE, DIFFUSE.a);
+ else
+ COLOR_SUM = diffuse;
+}
diff --git a/src/graphs3d/qml/qquickgraphsbars.cpp b/src/graphs3d/qml/qquickgraphsbars.cpp
index f893339f..63ad8acc 100644
--- a/src/graphs3d/qml/qquickgraphsbars.cpp
+++ b/src/graphs3d/qml/qquickgraphsbars.cpp
@@ -1525,6 +1525,12 @@ void QQuickGraphsBars::handleValueColoringChanged()
emitNeedRender();
}
+void QQuickGraphsBars::handleLightingModeChanged()
+{
+ setSeriesVisualsDirty(true);
+ emitNeedRender();
+}
+
void QQuickGraphsBars::connectSeries(QBar3DSeries *series)
{
m_meshType = series->mesh();
@@ -2005,6 +2011,9 @@ void QQuickGraphsBars::updateBarVisuals(QBar3DSeries *series)
auto customMaterial = qobject_cast<QQuick3DCustomMaterial *>(materialsRef.at(0));
customMaterial->setProperty("valueColoring", series->isValueColoringEnabled());
customMaterial->setProperty("heightValue", barList.at(i)->heightValue);
+ customMaterial->setProperty("shaded",
+ series->lightingMode()
+ == QAbstract3DSeries::LightingMode::Shaded);
}
} else if (optimizationHint() == QtGraphs3D::OptimizationHint::Default) {
for (int i = 0; i < barList.count(); i++) {
@@ -2039,6 +2048,9 @@ void QQuickGraphsBars::updateBarVisuals(QBar3DSeries *series)
auto customMaterial = qobject_cast<QQuick3DCustomMaterial *>(materialsRef.at(0));
customMaterial->setProperty("valueColoring", series->isValueColoringEnabled());
customMaterial->setProperty("rootScale", rootNode()->scale().y());
+ customMaterial->setProperty("shaded",
+ series->lightingMode()
+ == QAbstract3DSeries::LightingMode::Shaded);
}
}
}
diff --git a/src/graphs3d/qml/qquickgraphsbars_p.h b/src/graphs3d/qml/qquickgraphsbars_p.h
index 8d7502e3..281f8a7f 100644
--- a/src/graphs3d/qml/qquickgraphsbars_p.h
+++ b/src/graphs3d/qml/qquickgraphsbars_p.h
@@ -139,6 +139,7 @@ public:
void handleAxisRangeChangedBySender(QObject *sender) override;
void adjustAxisRanges() override;
+ void handleLightingModeChanged() override;
void setSelectedBar(QPoint coord, QBar3DSeries *series, bool enterSlice);
diff --git a/src/graphs3d/qml/qquickgraphsitem.cpp b/src/graphs3d/qml/qquickgraphsitem.cpp
index f84c1ba1..b6d63c3f 100644
--- a/src/graphs3d/qml/qquickgraphsitem.cpp
+++ b/src/graphs3d/qml/qquickgraphsitem.cpp
@@ -1558,6 +1558,10 @@ void QQuickGraphsItem::insertSeries(qsizetype index, QAbstract3DSeries *series)
&QAbstract3DSeries::visibleChanged,
this,
&QQuickGraphsItem::handleSeriesVisibilityChanged);
+ QObject::connect(series,
+ &QAbstract3DSeries::lightingModeChanged,
+ this,
+ &QQuickGraphsItem::handleLightingModeChanged);
series->d_func()->resetToTheme(*theme(), oldSize, false);
qCDebug(lcSeries3D) << __FUNCTION__
<< "insert" << series << "at index of:" << index;
@@ -1575,6 +1579,10 @@ void QQuickGraphsItem::removeSeriesInternal(QAbstract3DSeries *series)
&QAbstract3DSeries::visibleChanged,
this,
&QQuickGraphsItem::handleSeriesVisibilityChanged);
+ QObject::disconnect(series,
+ &QAbstract3DSeries::lightingModeChanged,
+ this,
+ &QQuickGraphsItem::handleLightingModeChanged);
series->d_func()->setGraph(0);
m_isDataDirty = true;
m_isSeriesVisualsDirty = true;
diff --git a/src/graphs3d/qml/qquickgraphsitem_p.h b/src/graphs3d/qml/qquickgraphsitem_p.h
index 7f929d1f..c42177b9 100644
--- a/src/graphs3d/qml/qquickgraphsitem_p.h
+++ b/src/graphs3d/qml/qquickgraphsitem_p.h
@@ -271,6 +271,7 @@ public:
virtual void handleAxisTitleFixedChangedBySender(QObject *sender);
virtual void handleAxisTitleOffsetChangedBySender(QObject *sender);
virtual void handleSeriesVisibilityChangedBySender(QObject *sender);
+ virtual void handleLightingModeChanged() = 0;
virtual void adjustAxisRanges() = 0;
bool graphPositionQueryPending() const { return m_graphPositionQueryPending; }
diff --git a/src/graphs3d/qml/qquickgraphsscatter.cpp b/src/graphs3d/qml/qquickgraphsscatter.cpp
index 5aa007bc..d0fe3545 100644
--- a/src/graphs3d/qml/qquickgraphsscatter.cpp
+++ b/src/graphs3d/qml/qquickgraphsscatter.cpp
@@ -400,6 +400,8 @@ void QQuickGraphsScatter::updateScatterGraphItemVisuals(ScatterModel *graphModel
? true
: false;
+ const bool shaded = graphModel->series->lightingMode()
+ == QAbstract3DSeries::LightingMode::Shaded;
if (optimizationHint() == QtGraphs3D::OptimizationHint::Legacy) {
// Release resources that might not have been deleted even though deleteLater had been set
if (m_customView)
@@ -450,11 +452,13 @@ void QQuickGraphsScatter::updateScatterGraphItemVisuals(ScatterModel *graphModel
updateMaterialProperties(graphModel->baseRef,
graphModel->seriesTexture,
graphModel->series->baseColor(),
- transparency);
+ transparency,
+ shaded);
updateMaterialProperties(graphModel->selectionRef,
graphModel->highlightTexture,
- graphModel->series->singleHighlightColor());
+ graphModel->series->singleHighlightColor(),
+ shaded);
} else if (optimizationHint() == QtGraphs3D::OptimizationHint::Default) {
graphModel->instancingRootItem->setVisible(true);
@@ -481,7 +485,8 @@ void QQuickGraphsScatter::updateScatterGraphItemVisuals(ScatterModel *graphModel
updateMaterialProperties(graphModel->instancingRootItem,
graphModel->seriesTexture,
graphModel->series->baseColor(),
- transparency);
+ transparency,
+ shaded);
} else {
auto textureData = static_cast<QQuickGraphsTextureData *>(
graphModel->seriesTexture->textureData());
@@ -526,7 +531,8 @@ void QQuickGraphsScatter::updateScatterGraphItemVisuals(ScatterModel *graphModel
QStringLiteral(":/materials/ScatterMaterial"));
updateMaterialProperties(graphModel->selectionIndicator,
graphModel->highlightTexture,
- graphModel->series->singleHighlightColor());
+ graphModel->series->singleHighlightColor(),
+ shaded);
graphModel->selectionIndicator->setCastsShadows(!usePoint);
} else {
// Rangegradient
@@ -639,6 +645,9 @@ void QQuickGraphsScatter::updateInstancedMaterialProperties(ScatterModel *graphM
auto customMaterial = static_cast<QQuick3DCustomMaterial *>(materialsRef.at(0));
customMaterial->setProperty("transparency", transparency);
+ customMaterial->setProperty("shaded",
+ graphModel->series->lightingMode()
+ == QAbstract3DSeries::LightingMode::Shaded);
QVariant textureInputAsVariant = customMaterial->property("custex");
QQuick3DShaderUtilsTextureInput *textureInput = textureInputAsVariant
@@ -659,12 +668,14 @@ void QQuickGraphsScatter::updateInstancedMaterialProperties(ScatterModel *graphM
void QQuickGraphsScatter::updateMaterialProperties(QQuick3DModel *item,
QQuick3DTexture *texture,
QColor color,
- const bool transparency)
+ const bool transparency,
+ const bool shaded)
{
QQmlListReference materialsRef(item, "materials");
auto customMaterial = static_cast<QQuick3DCustomMaterial *>(materialsRef.at(0));
customMaterial->setProperty("transparency", transparency);
customMaterial->setProperty("rootScale", rootNode()->scale().y());
+ customMaterial->setProperty("shaded", shaded);
int style = customMaterial->property("colorStyle").value<int>();
if (style == 0) {
@@ -1001,6 +1012,16 @@ void QQuickGraphsScatter::handleAxisRangeChangedBySender(QObject *sender)
setSelectedItem(m_selectedItem, m_selectedItemSeries);
}
+void QQuickGraphsScatter::handleLightingModeChanged() {
+ auto series = static_cast<QScatter3DSeries *>(QObject::sender());
+ for (auto model : m_scatterGraphs) {
+ if (model->series == series) {
+ updateScatterGraphItemVisuals(model);
+ break;
+ }
+ }
+}
+
QQmlListProperty<QScatter3DSeries> QQuickGraphsScatter::seriesList()
{
return QQmlListProperty<QScatter3DSeries>(this,
diff --git a/src/graphs3d/qml/qquickgraphsscatter_p.h b/src/graphs3d/qml/qquickgraphsscatter_p.h
index 97287a04..1018eca8 100644
--- a/src/graphs3d/qml/qquickgraphsscatter_p.h
+++ b/src/graphs3d/qml/qquickgraphsscatter_p.h
@@ -93,6 +93,8 @@ public:
void setSeriesVisualsDirty() { m_isSeriesVisualsDirty = true; }
bool isDataDirty() const { return m_isDataDirty; }
+ void handleLightingModeChanged() override;
+
public Q_SLOTS:
void handleAxisXChanged(QAbstract3DAxis *axis) override;
void handleAxisYChanged(QAbstract3DAxis *axis) override;
@@ -218,7 +220,8 @@ private:
void updateMaterialProperties(QQuick3DModel *item,
QQuick3DTexture *texture,
QColor color = Qt::white,
- const bool transparency = false);
+ const bool transparency = false,
+ const bool shaded = true);
QQuick3DTexture *createTexture();
QQuick3DModel *createDataItemModel(QAbstract3DSeries::Mesh meshType);
QQuick3DNode *createSeriesRoot();
diff --git a/src/graphs3d/qml/qquickgraphssurface.cpp b/src/graphs3d/qml/qquickgraphssurface.cpp
index 518d109b..04657c81 100644
--- a/src/graphs3d/qml/qquickgraphssurface.cpp
+++ b/src/graphs3d/qml/qquickgraphssurface.cpp
@@ -265,6 +265,17 @@ void QQuickGraphsSurface::changeSlicePointerMeshTypeForSeries(QAbstract3DSeries:
changeSlicePointerForSeries(getMeshFileName(mesh, series), series);
}
+void QQuickGraphsSurface::handleLightingModeChanged()
+{
+ auto series = static_cast<QSurface3DSeries *>(QObject::sender());
+ for (auto model : m_model) {
+ if (model->series == series) {
+ updateMaterial(model);
+ break;
+ }
+ }
+}
+
QString QQuickGraphsSurface::getMeshFileName(QAbstract3DSeries::Mesh mesh,
QSurface3DSeries *series) const
{
@@ -1980,7 +1991,9 @@ void QQuickGraphsSurface::updateMaterial(SurfaceModel *model)
material->setParentItem(model->model);
material->setCullMode(QQuick3DMaterial::NoCulling);
material->setProperty("flatShading", flatShading);
-
+ material->setProperty("shaded",
+ model->series->lightingMode()
+ == QAbstract3DSeries::LightingMode::Shaded);
}
if (textured) {
diff --git a/src/graphs3d/qml/qquickgraphssurface_p.h b/src/graphs3d/qml/qquickgraphssurface_p.h
index db8cff67..81fa789c 100644
--- a/src/graphs3d/qml/qquickgraphssurface_p.h
+++ b/src/graphs3d/qml/qquickgraphssurface_p.h
@@ -144,6 +144,8 @@ public:
void handleSeriesVisibilityChangedBySender(QObject *sender) override;
void adjustAxisRanges() override;
+ void handleLightingModeChanged() override;
+
QSharedPointer<QQuickItemGrabResult> renderSliceToImage(int index, int requestedIndex, QtGraphs3D::SliceType sliceType);
Q_REVISION(6, 10)
Q_INVOKABLE void renderSliceToImage(int index, int requestedIndex,
diff --git a/src/graphs3d/qml/resources/BarsMaterial.qml b/src/graphs3d/qml/resources/BarsMaterial.qml
index d08c4f11..f038d729 100644
--- a/src/graphs3d/qml/resources/BarsMaterial.qml
+++ b/src/graphs3d/qml/resources/BarsMaterial.qml
@@ -18,6 +18,8 @@ CustomMaterial {
property real specularBrightness: 0.25
readonly property real shininess: (1.0 - specularBrightness) * 100
+ property bool shaded: false
+
shadingMode: CustomMaterial.Shaded
sourceBlend: !transparency ? CustomMaterial.NoBlend : CustomMaterial.SrcAlpha
destinationBlend: !transparency ? CustomMaterial.NoBlend : CustomMaterial.OneMinusSrcAlpha
diff --git a/src/graphs3d/qml/resources/BarsMaterialInstancing.qml b/src/graphs3d/qml/resources/BarsMaterialInstancing.qml
index 4424009e..66187083 100644
--- a/src/graphs3d/qml/resources/BarsMaterialInstancing.qml
+++ b/src/graphs3d/qml/resources/BarsMaterialInstancing.qml
@@ -18,6 +18,8 @@ CustomMaterial {
property real specularBrightness: 0.25
readonly property real shininess: (1.0 - specularBrightness) * 100
+ property bool shaded: false
+
shadingMode: CustomMaterial.Shaded
sourceBlend: !transparency ? CustomMaterial.NoBlend : CustomMaterial.SrcAlpha
destinationBlend: !transparency ? CustomMaterial.NoBlend : CustomMaterial.OneMinusSrcAlpha
diff --git a/src/graphs3d/qml/resources/ScatterMaterial.qml b/src/graphs3d/qml/resources/ScatterMaterial.qml
index 53873249..ef37f2a2 100644
--- a/src/graphs3d/qml/resources/ScatterMaterial.qml
+++ b/src/graphs3d/qml/resources/ScatterMaterial.qml
@@ -16,6 +16,8 @@ CustomMaterial {
property real specularBrightness: 0.25
readonly property real shininess: (1.0 - specularBrightness) * 100
+ property bool shaded: false
+
shadingMode: CustomMaterial.Shaded
sourceBlend: !transparency ? CustomMaterial.NoBlend : CustomMaterial.SrcAlpha
destinationBlend: !transparency ? CustomMaterial.NoBlend : CustomMaterial.OneMinusSrcAlpha
diff --git a/src/graphs3d/qml/resources/ScatterMaterialInstancing.qml b/src/graphs3d/qml/resources/ScatterMaterialInstancing.qml
index 9db1674d..fa14da18 100644
--- a/src/graphs3d/qml/resources/ScatterMaterialInstancing.qml
+++ b/src/graphs3d/qml/resources/ScatterMaterialInstancing.qml
@@ -16,6 +16,8 @@ CustomMaterial {
property real specularBrightness: 0.25
readonly property real shininess: (1.0 - specularBrightness) * 100
+ property bool shaded: false
+
shadingMode: CustomMaterial.Shaded
sourceBlend: !transparency ? CustomMaterial.NoBlend : CustomMaterial.SrcAlpha
destinationBlend: !transparency ? CustomMaterial.NoBlend : CustomMaterial.OneMinusSrcAlpha
diff --git a/src/graphs3d/qml/resources/SurfaceMaterial.qml b/src/graphs3d/qml/resources/SurfaceMaterial.qml
index 0d2ac4e3..f96eeeea 100644
--- a/src/graphs3d/qml/resources/SurfaceMaterial.qml
+++ b/src/graphs3d/qml/resources/SurfaceMaterial.qml
@@ -35,6 +35,8 @@ CustomMaterial {
property real specularBrightness: 0.25
readonly property real shininess: (1.0 - specularBrightness) * 100
+ property bool shaded: false
+
shadingMode: CustomMaterial.Shaded
vertexShader: "qrc:/shaders/surfacevert"
fragmentShader: "qrc:/shaders/surfacefrag"