summaryrefslogtreecommitdiffstats
path: root/src/datavisualization
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2013-10-31 12:25:00 +0200
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2013-10-31 13:34:06 +0200
commit3f2dd48dbbb2a67ffc00ddab36b44c0449455126 (patch)
tree3999ef41197f8861a867cb5ec95361e5dd77e297 /src/datavisualization
parentb44b030ec0c74649daee92160c73cbd2fe93d7c1 (diff)
Cleaning controller callbacks from renderers, part 2
Removed m_controller from renderers so it won't accidentally be used again. Replaced the remaining callbacks with queued signals. Task-number: QTRD-2216 Change-Id: Ib10bc661bcdc3d810baa8b2513f5e6dd67f7207e Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'src/datavisualization')
-rw-r--r--src/datavisualization/engine/abstract3dcontroller.cpp5
-rw-r--r--src/datavisualization/engine/abstract3dcontroller_p.h3
-rw-r--r--src/datavisualization/engine/abstract3drenderer.cpp45
-rw-r--r--src/datavisualization/engine/abstract3drenderer_p.h6
-rw-r--r--src/datavisualization/engine/bars3dcontroller_p.h2
-rw-r--r--src/datavisualization/engine/bars3drenderer.cpp40
-rw-r--r--src/datavisualization/engine/bars3drenderer_p.h3
-rw-r--r--src/datavisualization/engine/scatter3dcontroller_p.h2
-rw-r--r--src/datavisualization/engine/scatter3drenderer.cpp40
-rw-r--r--src/datavisualization/engine/scatter3drenderer_p.h6
-rw-r--r--src/datavisualization/engine/surface3dcontroller.cpp8
-rw-r--r--src/datavisualization/engine/surface3dcontroller_p.h3
-rw-r--r--src/datavisualization/engine/surface3drenderer.cpp46
-rw-r--r--src/datavisualization/engine/surface3drenderer_p.h3
14 files changed, 78 insertions, 134 deletions
diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp
index f1e1d27c..ee3e47e4 100644
--- a/src/datavisualization/engine/abstract3dcontroller.cpp
+++ b/src/datavisualization/engine/abstract3dcontroller.cpp
@@ -961,6 +961,11 @@ void Abstract3DController::handleInputPositionChanged(const QPoint &position)
emitNeedRender();
}
+void Abstract3DController::handleRequestShadowQuality(QDataVis::ShadowQuality quality)
+{
+ setShadowQuality(quality);
+}
+
void Abstract3DController::handleAxisLabelFormatChangedBySender(QObject *sender)
{
// Label format changing needs to dirty the data so that labels are reset.
diff --git a/src/datavisualization/engine/abstract3dcontroller_p.h b/src/datavisualization/engine/abstract3dcontroller_p.h
index e6ea33eb..450153a0 100644
--- a/src/datavisualization/engine/abstract3dcontroller_p.h
+++ b/src/datavisualization/engine/abstract3dcontroller_p.h
@@ -317,6 +317,9 @@ public slots:
void handleInputStateChanged(QDataVis::InputState state);
void handleInputPositionChanged(const QPoint &position);
+ // Renderer callback handlers
+ void handleRequestShadowQuality(QDataVis::ShadowQuality quality);
+
signals:
void shadowQualityChanged(QDataVis::ShadowQuality quality);
void activeInputHandlerChanged(QAbstract3DInputHandler *inputHandler);
diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp
index 27820067..7aec8adf 100644
--- a/src/datavisualization/engine/abstract3drenderer.cpp
+++ b/src/datavisualization/engine/abstract3drenderer.cpp
@@ -26,9 +26,10 @@
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
+Q_DECLARE_METATYPE(QDataVis::ShadowQuality)
+
Abstract3DRenderer::Abstract3DRenderer(Abstract3DController *controller)
: QObject(0),
- m_controller(controller),
m_hasNegativeValues(false),
m_cachedTheme(),
m_cachedFont(QFont(QStringLiteral("Arial"))),
@@ -50,8 +51,10 @@ Abstract3DRenderer::Abstract3DRenderer(Abstract3DController *controller)
{
QObject::connect(m_drawer, &Drawer::drawerChanged, this, &Abstract3DRenderer::updateTextures);
- QObject::connect(this, &Abstract3DRenderer::needRender, m_controller,
+ QObject::connect(this, &Abstract3DRenderer::needRender, controller,
&Abstract3DController::needRender, Qt::QueuedConnection);
+ QObject::connect(this, &Abstract3DRenderer::requestShadowQuality, controller,
+ &Abstract3DController::handleRequestShadowQuality, Qt::QueuedConnection);
}
Abstract3DRenderer::~Abstract3DRenderer()
@@ -322,5 +325,43 @@ AxisRenderCache &Abstract3DRenderer::axisCacheForOrientation(Q3DAbstractAxis::Ax
}
}
+void Abstract3DRenderer::lowerShadowQuality()
+{
+ QDataVis::ShadowQuality newQuality = QDataVis::ShadowQualityNone;
+
+ switch (m_cachedShadowQuality) {
+ case QDataVis::ShadowQualityHigh:
+ qWarning("Creating high quality shadows failed. Changing to medium quality.");
+ newQuality = QDataVis::ShadowQualityMedium;
+ break;
+ case QDataVis::ShadowQualityMedium:
+ qWarning("Creating medium quality shadows failed. Changing to low quality.");
+ newQuality = QDataVis::ShadowQualityLow;
+ break;
+ case QDataVis::ShadowQualityLow:
+ qWarning("Creating low quality shadows failed. Switching shadows off.");
+ newQuality = QDataVis::ShadowQualityNone;
+ break;
+ case QDataVis::ShadowQualitySoftHigh:
+ qWarning("Creating soft high quality shadows failed. Changing to soft medium quality.");
+ newQuality = QDataVis::ShadowQualitySoftMedium;
+ break;
+ case QDataVis::ShadowQualitySoftMedium:
+ qWarning("Creating soft medium quality shadows failed. Changing to soft low quality.");
+ newQuality = QDataVis::ShadowQualitySoftLow;
+ break;
+ case QDataVis::ShadowQualitySoftLow:
+ qWarning("Creating soft low quality shadows failed. Switching shadows off.");
+ newQuality = QDataVis::ShadowQualityNone;
+ break;
+ default:
+ // You'll never get here
+ break;
+ }
+
+ emit requestShadowQuality(newQuality);
+ updateShadowQuality(newQuality);
+}
+
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/engine/abstract3drenderer_p.h b/src/datavisualization/engine/abstract3drenderer_p.h
index 718d318a..133ef020 100644
--- a/src/datavisualization/engine/abstract3drenderer_p.h
+++ b/src/datavisualization/engine/abstract3drenderer_p.h
@@ -53,9 +53,6 @@ class Abstract3DRenderer : public QObject, protected QOpenGLFunctions
{
Q_OBJECT
-private:
- Abstract3DController *m_controller;
-
protected:
bool m_hasNegativeValues;
Theme m_cachedTheme;
@@ -131,6 +128,7 @@ public:
signals:
void needRender(); // Emit this if something in renderer causes need for another render pass.
+ void requestShadowQuality(QDataVis::ShadowQuality quality); // For automatic quality adjustments
protected:
Abstract3DRenderer(Abstract3DController *controller);
@@ -142,6 +140,8 @@ protected:
virtual void loadMeshFile() = 0;
AxisRenderCache &axisCacheForOrientation(Q3DAbstractAxis::AxisOrientation orientation);
+
+ virtual void lowerShadowQuality();
};
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/engine/bars3dcontroller_p.h b/src/datavisualization/engine/bars3dcontroller_p.h
index 2e751053..652aeb48 100644
--- a/src/datavisualization/engine/bars3dcontroller_p.h
+++ b/src/datavisualization/engine/bars3dcontroller_p.h
@@ -112,6 +112,8 @@ public slots:
void handleItemChanged(int rowIndex, int columnIndex);
void handleDataRowLabelsChanged();
void handleDataColumnLabelsChanged();
+
+ // Renderer callback handlers
void handleBarClicked(const QPoint &position);
signals:
diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp
index c2dc4941..ab6b1a56 100644
--- a/src/datavisualization/engine/bars3drenderer.cpp
+++ b/src/datavisualization/engine/bars3drenderer.cpp
@@ -46,7 +46,6 @@ const int smallerVPSize = 5;
Bars3DRenderer::Bars3DRenderer(Bars3DController *controller)
: Abstract3DRenderer(controller),
- m_controller(controller),
m_cachedIsSlicingActivated(false),
m_cachedRowCount(0),
m_cachedColumnCount(0),
@@ -1894,43 +1893,8 @@ void Bars3DRenderer::updateDepthBuffer()
m_depthTexture = m_textureHelper->createDepthTexture(m_mainViewPort.size(),
m_depthFrameBuffer,
m_shadowQualityMultiplier);
- if (!m_depthTexture) {
- switch (m_cachedShadowQuality) {
- case QDataVis::ShadowQualityHigh:
- qWarning("Creating high quality shadows failed. Changing to medium quality.");
- (void)m_controller->setShadowQuality(QDataVis::ShadowQualityMedium);
- updateShadowQuality(QDataVis::ShadowQualityMedium);
- break;
- case QDataVis::ShadowQualityMedium:
- qWarning("Creating medium quality shadows failed. Changing to low quality.");
- (void)m_controller->setShadowQuality(QDataVis::ShadowQualityLow);
- updateShadowQuality(QDataVis::ShadowQualityLow);
- break;
- case QDataVis::ShadowQualityLow:
- qWarning("Creating low quality shadows failed. Switching shadows off.");
- (void)m_controller->setShadowQuality(QDataVis::ShadowQualityNone);
- updateShadowQuality(QDataVis::ShadowQualityNone);
- break;
- case QDataVis::ShadowQualitySoftHigh:
- qWarning("Creating soft high quality shadows failed. Changing to soft medium quality.");
- (void)m_controller->setShadowQuality(QDataVis::ShadowQualitySoftMedium);
- updateShadowQuality(QDataVis::ShadowQualitySoftMedium);
- break;
- case QDataVis::ShadowQualitySoftMedium:
- qWarning("Creating soft medium quality shadows failed. Changing to soft low quality.");
- (void)m_controller->setShadowQuality(QDataVis::ShadowQualitySoftLow);
- updateShadowQuality(QDataVis::ShadowQualitySoftLow);
- break;
- case QDataVis::ShadowQualitySoftLow:
- qWarning("Creating soft low quality shadows failed. Switching shadows off.");
- (void)m_controller->setShadowQuality(QDataVis::ShadowQualityNone);
- updateShadowQuality(QDataVis::ShadowQualityNone);
- break;
- default:
- // You'll never get here
- break;
- }
- }
+ if (!m_depthTexture)
+ lowerShadowQuality();
}
}
#endif
diff --git a/src/datavisualization/engine/bars3drenderer_p.h b/src/datavisualization/engine/bars3drenderer_p.h
index 85471a5c..1bd68ccf 100644
--- a/src/datavisualization/engine/bars3drenderer_p.h
+++ b/src/datavisualization/engine/bars3drenderer_p.h
@@ -51,9 +51,6 @@ class QT_DATAVISUALIZATION_EXPORT Bars3DRenderer : public Abstract3DRenderer
Q_OBJECT
private:
- // TODO: Filter to the set of attributes to be moved to the model object.
- Bars3DController *m_controller;
-
// Cached state based on emitted signals from the controller
QSizeF m_cachedBarThickness;
QSizeF m_cachedBarSpacing;
diff --git a/src/datavisualization/engine/scatter3dcontroller_p.h b/src/datavisualization/engine/scatter3dcontroller_p.h
index a1eae9f3..79be5119 100644
--- a/src/datavisualization/engine/scatter3dcontroller_p.h
+++ b/src/datavisualization/engine/scatter3dcontroller_p.h
@@ -90,6 +90,8 @@ public slots:
void handleItemsChanged(int startIndex, int count);
void handleItemsRemoved(int startIndex, int count);
void handleItemsInserted(int startIndex, int count);
+
+ // Renderer callback handlers
void handleItemClicked(int index);
signals:
diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp
index ed69d88d..f0534c77 100644
--- a/src/datavisualization/engine/scatter3drenderer.cpp
+++ b/src/datavisualization/engine/scatter3drenderer.cpp
@@ -52,7 +52,6 @@ const GLfloat gridLineWidth = 0.005f;
Scatter3DRenderer::Scatter3DRenderer(Scatter3DController *controller)
: Abstract3DRenderer(controller),
- m_controller(controller),
m_selectedItem(0),
m_xFlipped(false),
m_zFlipped(false),
@@ -1505,43 +1504,8 @@ void Scatter3DRenderer::updateDepthBuffer()
m_depthTexture = m_textureHelper->createDepthTexture(m_mainViewPort.size(),
m_depthFrameBuffer,
m_shadowQualityMultiplier);
- if (!m_depthTexture) {
- switch (m_cachedShadowQuality) {
- case QDataVis::ShadowQualityHigh:
- qWarning("Creating high quality shadows failed. Changing to medium quality.");
- (void)m_controller->setShadowQuality(QDataVis::ShadowQualityMedium);
- updateShadowQuality(QDataVis::ShadowQualityMedium);
- break;
- case QDataVis::ShadowQualityMedium:
- qWarning("Creating medium quality shadows failed. Changing to low quality.");
- (void)m_controller->setShadowQuality(QDataVis::ShadowQualityLow);
- updateShadowQuality(QDataVis::ShadowQualityLow);
- break;
- case QDataVis::ShadowQualityLow:
- qWarning("Creating low quality shadows failed. Switching shadows off.");
- (void)m_controller->setShadowQuality(QDataVis::ShadowQualityNone);
- updateShadowQuality(QDataVis::ShadowQualityNone);
- break;
- case QDataVis::ShadowQualitySoftHigh:
- qWarning("Creating soft high quality shadows failed. Changing to soft medium quality.");
- (void)m_controller->setShadowQuality(QDataVis::ShadowQualitySoftMedium);
- updateShadowQuality(QDataVis::ShadowQualitySoftMedium);
- break;
- case QDataVis::ShadowQualitySoftMedium:
- qWarning("Creating soft medium quality shadows failed. Changing to soft low quality.");
- (void)m_controller->setShadowQuality(QDataVis::ShadowQualitySoftLow);
- updateShadowQuality(QDataVis::ShadowQualitySoftLow);
- break;
- case QDataVis::ShadowQualitySoftLow:
- qWarning("Creating soft low quality shadows failed. Switching shadows off.");
- (void)m_controller->setShadowQuality(QDataVis::ShadowQualityNone);
- updateShadowQuality(QDataVis::ShadowQualityNone);
- break;
- default:
- // You'll never get here
- break;
- }
- }
+ if (!m_depthTexture)
+ lowerShadowQuality();
}
}
#endif
diff --git a/src/datavisualization/engine/scatter3drenderer_p.h b/src/datavisualization/engine/scatter3drenderer_p.h
index 2f98deaf..4cfc5b7b 100644
--- a/src/datavisualization/engine/scatter3drenderer_p.h
+++ b/src/datavisualization/engine/scatter3drenderer_p.h
@@ -52,12 +52,6 @@ class QT_DATAVISUALIZATION_EXPORT Scatter3DRenderer : public Abstract3DRenderer
Q_OBJECT
private:
- // TODO: Filter to the set of attributes to be moved to the model object.
- // * All GL rendering only related attribs should be moved out of this public set.
- // * All attribs that are modifiable from QML need to e in this set.
-
- Scatter3DController *m_controller;
-
// Internal state
ScatterRenderItem *m_selectedItem; // points to renderitem array
bool m_xFlipped;
diff --git a/src/datavisualization/engine/surface3dcontroller.cpp b/src/datavisualization/engine/surface3dcontroller.cpp
index 71b09efd..ec1cae30 100644
--- a/src/datavisualization/engine/surface3dcontroller.cpp
+++ b/src/datavisualization/engine/surface3dcontroller.cpp
@@ -65,6 +65,8 @@ void Surface3DController::initializeOpenGL()
synchDataToRenderer();
QObject::connect(m_renderer, &Surface3DRenderer::pointClicked, this,
&Surface3DController::handlePointClicked, Qt::QueuedConnection);
+ QObject::connect(m_renderer, &Surface3DRenderer::requestSmoothSurface, this,
+ &Surface3DController::handleRequestSmoothSurface, Qt::QueuedConnection);
emitNeedRender();
}
@@ -301,6 +303,12 @@ void Surface3DController::handlePointClicked(const QPoint &position)
// TODO: Also hover needed? (QTRD-2131)
}
+void Surface3DController::handleRequestSmoothSurface(bool enable)
+{
+ setSmoothSurface(enable);
+ emitNeedRender();
+}
+
void Surface3DController::adjustValueAxisRange()
{
if (m_data) {
diff --git a/src/datavisualization/engine/surface3dcontroller_p.h b/src/datavisualization/engine/surface3dcontroller_p.h
index 07d15f29..83a52b7d 100644
--- a/src/datavisualization/engine/surface3dcontroller_p.h
+++ b/src/datavisualization/engine/surface3dcontroller_p.h
@@ -97,7 +97,10 @@ public:
public slots:
void handleArrayReset();
+
+ // Renderer callback handlers
void handlePointClicked(const QPoint &position);
+ void handleRequestSmoothSurface(bool enable);
signals:
void smoothSurfaceEnabledChanged(bool enable);
diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp
index 1ebdac57..72f7db1d 100644
--- a/src/datavisualization/engine/surface3drenderer.cpp
+++ b/src/datavisualization/engine/surface3drenderer.cpp
@@ -60,7 +60,6 @@ const uint invalidSelectionId = uint(-1);
Surface3DRenderer::Surface3DRenderer(Surface3DController *controller)
: Abstract3DRenderer(controller),
- m_controller(controller),
m_labelStyle(QDataVis::LabelStyleFromTheme),
m_font(QFont(QStringLiteral("Arial"))),
m_isGridEnabled(true),
@@ -101,6 +100,7 @@ Surface3DRenderer::Surface3DRenderer(Surface3DController *controller)
m_selectionTexture(0),
m_selectionResultTexture(0),
m_shadowQualityToShader(33.3f),
+ m_cachedSmoothSurface(true),
m_flatSupported(true),
m_selectionPointer(0),
m_selectionActive(false),
@@ -118,14 +118,11 @@ Surface3DRenderer::Surface3DRenderer(Surface3DController *controller)
QStringLiteral(":/shaders/fragmentSurfaceFlat"));
if (!tester.testCompile()) {
m_flatSupported = false;
- m_controller->setSmoothSurface(true);
+ emit requestSmoothSurface(true);
qWarning() << "Warning: Flat qualifier not supported on your platform's GLSL language."
" Requires at least GLSL version 1.2 with GL_EXT_gpu_shader4 extension.";
}
- m_cachedSmoothSurface = m_controller->smoothSurface();
- updateSurfaceGridStatus(m_controller->surfaceGrid());
-
// Shadows are disabled for Q3DSurface in Tech Preview
updateShadowQuality(QDataVis::ShadowQualityNone);
@@ -2094,43 +2091,8 @@ void Surface3DRenderer::updateDepthBuffer()
m_depthTexture = m_textureHelper->createDepthTexture(m_mainViewPort.size(),
m_depthFrameBuffer,
m_shadowQualityMultiplier);
- if (!m_depthTexture) {
- switch (m_cachedShadowQuality) {
- case QDataVis::ShadowQualityHigh:
- qWarning("Creating high quality shadows failed. Changing to medium quality.");
- (void)m_controller->setShadowQuality(QDataVis::ShadowQualityMedium);
- updateShadowQuality(QDataVis::ShadowQualityMedium);
- break;
- case QDataVis::ShadowQualityMedium:
- qWarning("Creating medium quality shadows failed. Changing to low quality.");
- (void)m_controller->setShadowQuality(QDataVis::ShadowQualityLow);
- updateShadowQuality(QDataVis::ShadowQualityLow);
- break;
- case QDataVis::ShadowQualityLow:
- qWarning("Creating low quality shadows failed. Switching shadows off.");
- (void)m_controller->setShadowQuality(QDataVis::ShadowQualityNone);
- updateShadowQuality(QDataVis::ShadowQualityNone);
- break;
- case QDataVis::ShadowQualitySoftHigh:
- qWarning("Creating soft high quality shadows failed. Changing to soft medium quality.");
- (void)m_controller->setShadowQuality(QDataVis::ShadowQualitySoftMedium);
- updateShadowQuality(QDataVis::ShadowQualitySoftMedium);
- break;
- case QDataVis::ShadowQualitySoftMedium:
- qWarning("Creating soft medium quality shadows failed. Changing to soft low quality.");
- (void)m_controller->setShadowQuality(QDataVis::ShadowQualitySoftLow);
- updateShadowQuality(QDataVis::ShadowQualitySoftLow);
- break;
- case QDataVis::ShadowQualitySoftLow:
- qWarning("Creating soft low quality shadows failed. Switching shadows off.");
- (void)m_controller->setShadowQuality(QDataVis::ShadowQualityNone);
- updateShadowQuality(QDataVis::ShadowQualityNone);
- break;
- default:
- // You'll never get here
- break;
- }
- }
+ if (!m_depthTexture)
+ lowerShadowQuality();
}
}
#endif
diff --git a/src/datavisualization/engine/surface3drenderer_p.h b/src/datavisualization/engine/surface3drenderer_p.h
index c7d41ac3..54257cde 100644
--- a/src/datavisualization/engine/surface3drenderer_p.h
+++ b/src/datavisualization/engine/surface3drenderer_p.h
@@ -60,8 +60,6 @@ class QT_DATAVISUALIZATION_EXPORT Surface3DRenderer : public Abstract3DRenderer
Q_OBJECT
public:
- Surface3DController *m_controller;
-
// Visual parameters
QRect m_boundingRect;
QDataVis::LabelStyle m_labelStyle;
@@ -150,6 +148,7 @@ protected:
signals:
void pointClicked(QPoint position);
+ void requestSmoothSurface(bool enable);
private:
void setViewPorts();