From 3f2dd48dbbb2a67ffc00ddab36b44c0449455126 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Thu, 31 Oct 2013 12:25:00 +0200 Subject: Cleaning controller callbacks from renderers, part 2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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ää --- .../engine/abstract3dcontroller.cpp | 5 +++ .../engine/abstract3dcontroller_p.h | 3 ++ .../engine/abstract3drenderer.cpp | 45 ++++++++++++++++++++- .../engine/abstract3drenderer_p.h | 6 +-- src/datavisualization/engine/bars3dcontroller_p.h | 2 + src/datavisualization/engine/bars3drenderer.cpp | 40 +------------------ src/datavisualization/engine/bars3drenderer_p.h | 3 -- .../engine/scatter3dcontroller_p.h | 2 + src/datavisualization/engine/scatter3drenderer.cpp | 40 +------------------ src/datavisualization/engine/scatter3drenderer_p.h | 6 --- .../engine/surface3dcontroller.cpp | 8 ++++ .../engine/surface3dcontroller_p.h | 3 ++ src/datavisualization/engine/surface3drenderer.cpp | 46 ++-------------------- src/datavisualization/engine/surface3drenderer_p.h | 3 +- 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(); -- cgit v1.2.3