summaryrefslogtreecommitdiffstats
path: root/src/graphs3d/qml
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/qml
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/qml')
-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
13 files changed, 78 insertions, 7 deletions
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"