diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2013-09-03 13:26:07 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2013-09-03 14:06:03 +0300 |
commit | 58979c740aa4814692e6555840e2fe4d3913561b (patch) | |
tree | b5b50b44011fa49788d84808c4d4e25db46599c4 | |
parent | 5eedaa018b6a1b1527b523d3018ac026af29eb33 (diff) |
Only render the scene when something changes.
This seems to improve frame rate, too.
Task-number: QTRD-2179
Change-Id: Icb3ddc5ba651ce0982068bcf7ab09c67be183717
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
-rw-r--r-- | src/datavis3d/engine/abstract3dcontroller.cpp | 59 | ||||
-rw-r--r-- | src/datavis3d/engine/abstract3dcontroller_p.h | 16 | ||||
-rw-r--r-- | src/datavis3d/engine/bars3dcontroller.cpp | 23 | ||||
-rw-r--r-- | src/datavis3d/engine/bars3dcontroller_p.h | 3 | ||||
-rw-r--r-- | src/datavis3d/engine/q3dbars.cpp | 2 | ||||
-rw-r--r-- | src/datavis3d/engine/q3dscatter.cpp | 2 | ||||
-rw-r--r-- | src/datavis3d/engine/q3dsurface.cpp | 2 | ||||
-rw-r--r-- | src/datavis3d/engine/q3dwindow.cpp | 17 | ||||
-rw-r--r-- | src/datavis3d/engine/q3dwindow.h | 6 | ||||
-rw-r--r-- | src/datavis3d/engine/q3dwindow_p.h | 1 | ||||
-rw-r--r-- | src/datavis3d/engine/scatter3dcontroller.cpp | 18 | ||||
-rw-r--r-- | src/datavis3d/engine/scatter3dcontroller_p.h | 1 | ||||
-rw-r--r-- | src/datavis3d/engine/surface3dcontroller.cpp | 13 | ||||
-rw-r--r-- | src/datavis3dqml2/declarativebarsrenderer.cpp | 11 | ||||
-rw-r--r-- | src/datavis3dqml2/declarativescatterrenderer.cpp | 11 |
15 files changed, 114 insertions, 71 deletions
diff --git a/src/datavis3d/engine/abstract3dcontroller.cpp b/src/datavis3d/engine/abstract3dcontroller.cpp index 441cc154..e746b14a 100644 --- a/src/datavis3d/engine/abstract3dcontroller.cpp +++ b/src/datavis3d/engine/abstract3dcontroller.cpp @@ -52,7 +52,8 @@ Abstract3DController::Abstract3DController(QRect boundRect, QObject *parent) : m_axisZ(0), m_renderer(0), m_isDataDirty(true), - m_data(0) + m_data(0), + m_renderPending(false) { m_theme.useColorTheme(QDataVis::ThemeSystem); #if defined(Q_OS_ANDROID) @@ -292,11 +293,18 @@ void Abstract3DController::synchDataToRenderer() void Abstract3DController::render(const GLuint defaultFboHandle) { + m_renderPending = false; + // If not initialized, do nothing. if (!m_renderer) return; m_renderer->render(m_cameraHelper, defaultFboHandle); + +#ifdef DISPLAY_RENDER_SPEED + // To get meaningful framerate, don't just do render on demand. + emitNeedRender(); +#endif } void Abstract3DController::setSize(const int width, const int height) @@ -305,7 +313,7 @@ void Abstract3DController::setSize(const int width, const int height) m_boundingRect.setHeight(height); m_changeTracker.boundingRectChanged = true; - emit boundingRectChanged(m_boundingRect); + emitNeedRender(); } const QSize Abstract3DController::size() @@ -323,7 +331,7 @@ void Abstract3DController::setBoundingRect(const QRect boundingRect) m_boundingRect = boundingRect; m_changeTracker.boundingRectChanged = true; - emit boundingRectChanged(m_boundingRect); + emitNeedRender(); } void Abstract3DController::setWidth(const int width) @@ -331,7 +339,7 @@ void Abstract3DController::setWidth(const int width) m_boundingRect.setWidth(width); m_changeTracker.sizeChanged = true; - emit sizeChanged(m_boundingRect); + emitNeedRender(); } int Abstract3DController::width() @@ -344,7 +352,7 @@ void Abstract3DController::setHeight(const int height) m_boundingRect.setHeight(height); m_changeTracker.sizeChanged = true; - emit sizeChanged(m_boundingRect); + emitNeedRender(); } int Abstract3DController::height() @@ -357,7 +365,7 @@ void Abstract3DController::setX(const int x) m_boundingRect.setX(x); m_changeTracker.positionChanged = true; - emit positionChanged(m_boundingRect); + emitNeedRender(); } int Abstract3DController::x() @@ -370,7 +378,7 @@ void Abstract3DController::setY(const int y) m_boundingRect.setY(y); m_changeTracker.positionChanged = true; - emit positionChanged(m_boundingRect); + emitNeedRender(); } int Abstract3DController::y() @@ -506,6 +514,8 @@ void Abstract3DController::setActiveDataProxy(QAbstractDataProxy *proxy) // Assume ownership and activate addDataProxy(proxy); m_data = proxy; + m_isDataDirty = true; + emitNeedRender(); } int Abstract3DController::zoomLevel() @@ -518,12 +528,13 @@ void Abstract3DController::setZoomLevel(int zoomLevel) m_zoomLevel = zoomLevel; m_changeTracker.zoomLevelChanged = true; - emit zoomLevelChanged(zoomLevel); + emitNeedRender(); } void Abstract3DController::setCameraPreset(QDataVis::CameraPreset preset) { m_cameraHelper->setCameraPreset(preset); + emitNeedRender(); } void Abstract3DController::setCameraPosition(GLfloat horizontal, GLfloat vertical, GLint distance) @@ -534,6 +545,7 @@ void Abstract3DController::setCameraPosition(GLfloat horizontal, GLfloat vertica m_cameraHelper->setCameraRotation(QPointF(m_horizontalRotation, m_verticalRotation)); //qDebug() << "camera rotation set to" << m_horizontalRotation << m_verticalRotation; + emitNeedRender(); } void Abstract3DController::setObjectColor(const QColor &baseColor, const QColor &heightColor, @@ -545,7 +557,7 @@ void Abstract3DController::setObjectColor(const QColor &baseColor, const QColor m_theme.m_uniformColor = uniform; m_changeTracker.themeChanged = true; - emit themeChanged(m_theme); + emitNeedRender(); } void Abstract3DController::setColorTheme(QDataVis::ColorTheme colorTheme) @@ -553,7 +565,7 @@ void Abstract3DController::setColorTheme(QDataVis::ColorTheme colorTheme) m_theme.useColorTheme(colorTheme); m_changeTracker.themeChanged = true; - emit themeChanged(m_theme); + emitNeedRender(); } Theme Abstract3DController::theme() @@ -566,7 +578,7 @@ void Abstract3DController::setFont(const QFont &font) m_font = font; m_changeTracker.fontChanged = true; - emit fontChanged(m_font); + emitNeedRender(); } QFont Abstract3DController::font() @@ -578,7 +590,7 @@ void Abstract3DController::setSelectionMode(QDataVis::SelectionMode mode) { m_selectionMode = mode; m_changeTracker.selectionModeChanged = true; - emit selectionModeChanged(m_selectionMode); + emitNeedRender(); } QDataVis::SelectionMode Abstract3DController::selectionMode() @@ -592,6 +604,7 @@ void Abstract3DController::setShadowQuality(QDataVis::ShadowQuality quality) m_changeTracker.shadowQualityChanged = true; emit shadowQualityChanged(m_shadowQuality); + emitNeedRender(); } QDataVis::ShadowQuality Abstract3DController::shadowQuality() @@ -604,7 +617,7 @@ void Abstract3DController::setLabelTransparency(QDataVis::LabelTransparency tran m_labelTransparency = transparency; m_changeTracker.labelTransparencyChanged = true; - emit labelTransparencyChanged(m_labelTransparency); + emitNeedRender(); } QDataVis::LabelTransparency Abstract3DController::labelTransparency() @@ -616,7 +629,7 @@ void Abstract3DController::setBackgroundEnabled(bool enable) { m_isBackgroundEnabled = enable; m_changeTracker.backgroundEnabledChanged = true; - emit backgroundEnabledChanged(m_isBackgroundEnabled); + emitNeedRender(); } bool Abstract3DController::backgroundEnabled() @@ -628,7 +641,7 @@ void Abstract3DController::setGridEnabled(bool enable) { m_isGridEnabled = enable; m_changeTracker.gridEnabledChanged = true; - emit gridEnabledChanged(m_isGridEnabled); + emitNeedRender(); } bool Abstract3DController::gridEnabled() @@ -640,7 +653,7 @@ void Abstract3DController::setMeshFileName(const QString &fileName) { m_objFile = fileName; m_changeTracker.objFileChanged = true; - emit meshFileNameChanged(m_objFile); + emitNeedRender(); } QString Abstract3DController::meshFileName() @@ -664,6 +677,7 @@ void Abstract3DController::handleAxisTitleChangedBySender(QObject *sender) m_changeTracker.axisZTitleChanged = true; else qWarning() << __FUNCTION__ << "invoked for invalid axis"; + emitNeedRender(); } void Abstract3DController::handleAxisLabelsChanged() @@ -681,6 +695,7 @@ void Abstract3DController::handleAxisLabelsChangedBySender(QObject *sender) m_changeTracker.axisZLabelsChanged = true; else qWarning() << __FUNCTION__ << "invoked for invalid axis"; + emitNeedRender(); } void Abstract3DController::handleAxisRangeChanged(qreal min, qreal max) @@ -704,6 +719,7 @@ void Abstract3DController::handleAxisRangeChangedBySender(QObject *sender) } else { qWarning() << __FUNCTION__ << "invoked for invalid axis"; } + emitNeedRender(); } void Abstract3DController::handleAxisSegmentCountChanged(int count) @@ -722,6 +738,7 @@ void Abstract3DController::handleAxisSegmentCountChangedBySender(QObject *sender m_changeTracker.axisZSegmentCountChanged = true; else qWarning() << __FUNCTION__ << "invoked for invalid axis"; + emitNeedRender(); } void Abstract3DController::handleAxisSubSegmentCountChanged(int count) @@ -740,6 +757,7 @@ void Abstract3DController::handleAxisSubSegmentCountChangedBySender(QObject *sen m_changeTracker.axisZSubSegmentCountChanged = true; else qWarning() << __FUNCTION__ << "invoked for invalid axis"; + emitNeedRender(); } void Abstract3DController::handleAxisAutoAdjustRangeChanged(bool autoAdjust) @@ -773,6 +791,7 @@ void Abstract3DController::handleAxisLabelFormatChangedBySender(QObject *sender) } else { qWarning() << __FUNCTION__ << "invoked for invalid axis"; } + emitNeedRender(); } void Abstract3DController::setAxisHelper(QAbstractAxis::AxisOrientation orientation, @@ -874,4 +893,12 @@ QCategoryAxis *Abstract3DController::createDefaultCategoryAxis() return defaultAxis; } +void Abstract3DController::emitNeedRender() +{ + if (!m_renderPending) { + emit needRender(); + m_renderPending = true; + } +} + QT_DATAVIS3D_END_NAMESPACE diff --git a/src/datavis3d/engine/abstract3dcontroller_p.h b/src/datavis3d/engine/abstract3dcontroller_p.h index 81775f9d..5225c686 100644 --- a/src/datavis3d/engine/abstract3dcontroller_p.h +++ b/src/datavis3d/engine/abstract3dcontroller_p.h @@ -169,6 +169,8 @@ protected: QAbstractDataProxy *m_data; QList<QAbstractDataProxy *> m_dataProxies; + bool m_renderPending; + explicit Abstract3DController(QRect boundRect, QObject *parent = 0); ~Abstract3DController(); @@ -286,23 +288,15 @@ public slots: void handleAxisLabelFormatChanged(const QString &format); signals: - void boundingRectChanged(QRect boundingRect); - void sizeChanged(QRect boundingRect); - void positionChanged(QRect boundingRect); - void zoomLevelChanged(int zoomLevel); - void themeChanged(Theme theme); - void fontChanged(QFont font); // TODO should be handled via axis?? What about font for selection label? void shadowQualityChanged(QDataVis::ShadowQuality quality); - void labelTransparencyChanged(QDataVis::LabelTransparency transparency); - void selectionModeChanged(QDataVis::SelectionMode mode); - void backgroundEnabledChanged(bool enable); - void gridEnabledChanged(bool enable); // TODO: Should be handled via axes? - void meshFileNameChanged(QString fileName); + + void needRender(); protected: virtual QAbstractAxis *createDefaultAxis(QAbstractAxis::AxisOrientation orientation); QValueAxis *createDefaultValueAxis(); QCategoryAxis *createDefaultCategoryAxis(); + void emitNeedRender(); private: void setAxisHelper(QAbstractAxis::AxisOrientation orientation, QAbstractAxis *axis, diff --git a/src/datavis3d/engine/bars3dcontroller.cpp b/src/datavis3d/engine/bars3dcontroller.cpp index 0844f422..b59d6bd1 100644 --- a/src/datavis3d/engine/bars3dcontroller.cpp +++ b/src/datavis3d/engine/bars3dcontroller.cpp @@ -72,6 +72,7 @@ void Bars3DController::initializeOpenGL() QObject::connect(m_renderer, &Bars3DRenderer::selectedBarPosChanged, this, &Bars3DController::handleSelectedBarPosChanged, Qt::QueuedConnection); + emitNeedRender(); } void Bars3DController::synchDataToRenderer() @@ -128,7 +129,7 @@ void Bars3DController::setSlicingActive(bool isSlicing) m_isSlicingActivated = isSlicing; m_changeTracker.slicingActiveChanged = true; - emit slicingActiveChanged(m_isSlicingActivated); + emitNeedRender(); } Bars3DController::MouseState Bars3DController::mouseState() @@ -144,6 +145,7 @@ void Bars3DController::mouseDoubleClickEvent(QMouseEvent *event) m_mouseState = Bars3DController::MouseOnScene; // update mouse positions to prevent jumping when releasing or repressing a button m_mousePos = event->pos(); + emitNeedRender(); } } @@ -215,6 +217,7 @@ void Bars3DController::mousePressEvent(QMouseEvent *event, const QPoint &mousePo m_mousePos = mousePos; } m_cameraHelper->updateMousePos(m_mousePos); + emitNeedRender(); } void Bars3DController::mouseReleaseEvent(QMouseEvent *event, const QPoint &mousePos) @@ -224,6 +227,7 @@ void Bars3DController::mouseReleaseEvent(QMouseEvent *event, const QPoint &mouse // update mouse positions to prevent jumping when releasing or repressing a button m_mousePos = mousePos; m_cameraHelper->updateMousePos(mousePos); + emitNeedRender(); } m_mouseState = Bars3DController::MouseNone; } @@ -231,8 +235,10 @@ void Bars3DController::mouseReleaseEvent(QMouseEvent *event, const QPoint &mouse void Bars3DController::mouseMoveEvent(QMouseEvent *event, const QPoint &mousePos) { Q_UNUSED(event); - if (Bars3DController::MouseRotating == m_mouseState) + if (Bars3DController::MouseRotating == m_mouseState) { m_mousePos = mousePos; + emitNeedRender(); + } } void Bars3DController::wheelEvent(QWheelEvent *event) @@ -284,7 +290,6 @@ void Bars3DController::setActiveDataProxy(QAbstractDataProxy *proxy) &Bars3DController::handleItemChanged); adjustValueAxisRange(); - m_isDataDirty = true; setSelectedBarPos(noSelectionPoint()); } @@ -294,6 +299,7 @@ void Bars3DController::handleArrayReset() adjustValueAxisRange(); m_isDataDirty = true; setSelectedBarPos(noSelectionPoint()); + emitNeedRender(); } void Bars3DController::handleRowsAdded(int startIndex, int count) @@ -305,6 +311,7 @@ void Bars3DController::handleRowsAdded(int startIndex, int count) setSlicingActive(false); adjustValueAxisRange(); m_isDataDirty = true; + emitNeedRender(); } void Bars3DController::handleRowsChanged(int startIndex, int count) @@ -316,6 +323,7 @@ void Bars3DController::handleRowsChanged(int startIndex, int count) setSlicingActive(false); adjustValueAxisRange(); m_isDataDirty = true; + emitNeedRender(); } void Bars3DController::handleRowsRemoved(int startIndex, int count) @@ -330,6 +338,7 @@ void Bars3DController::handleRowsRemoved(int startIndex, int count) // TODO this will break once data window offset is implemented if (startIndex >= static_cast<QBarDataProxy *>(m_data)->rowCount()) setSelectedBarPos(noSelectionPoint()); + emitNeedRender(); } void Bars3DController::handleRowsInserted(int startIndex, int count) @@ -341,6 +350,7 @@ void Bars3DController::handleRowsInserted(int startIndex, int count) setSlicingActive(false); adjustValueAxisRange(); m_isDataDirty = true; + emitNeedRender(); } void Bars3DController::handleItemChanged(int rowIndex, int columnIndex) @@ -352,6 +362,7 @@ void Bars3DController::handleItemChanged(int rowIndex, int columnIndex) setSlicingActive(false); adjustValueAxisRange(); m_isDataDirty = true; + emitNeedRender(); } void Bars3DController::handleSelectedBarPosChanged(const QPoint &position) @@ -362,6 +373,7 @@ void Bars3DController::handleSelectedBarPosChanged(const QPoint &position) if (pos != m_selectedBarPos) { m_selectedBarPos = pos; emit selectedBarPosChanged(pos); + emitNeedRender(); } } @@ -386,7 +398,7 @@ void Bars3DController::setBarSpecs(GLfloat thicknessRatio, const QSizeF &spacing m_isBarSpecRelative = relative; m_changeTracker.barSpecsChanged = true; - emit barSpecsChanged(thicknessRatio, spacing, relative); + emitNeedRender(); } GLfloat Bars3DController::barThickness() @@ -440,7 +452,7 @@ void Bars3DController::setDataWindow(int rowCount, int columnCount) m_changeTracker.sampleSpaceChanged = true; m_isDataDirty = true; // Render item array is recreated in renderer - emit sampleSpaceChanged(rowCount, columnCount); + emitNeedRender(); } void Bars3DController::setSelectionMode(QDataVis::SelectionMode mode) @@ -464,6 +476,7 @@ void Bars3DController::setSelectedBarPos(const QPoint &position) m_selectedBarPos = pos; m_changeTracker.selectedBarPosChanged = true; emit selectedBarPosChanged(pos); + emitNeedRender(); } } diff --git a/src/datavis3d/engine/bars3dcontroller_p.h b/src/datavis3d/engine/bars3dcontroller_p.h index aca669f5..d263c936 100644 --- a/src/datavis3d/engine/bars3dcontroller_p.h +++ b/src/datavis3d/engine/bars3dcontroller_p.h @@ -145,9 +145,6 @@ public slots: void handleSelectedBarPosChanged(const QPoint &position); signals: - void slicingActiveChanged(bool isSlicing); - void sampleSpaceChanged(int samplesRow, int samplesColumn); - void barSpecsChanged(GLfloat thicknessRatio, QSizeF spacing, bool relative); void selectedBarPosChanged(QPoint position); protected: diff --git a/src/datavis3d/engine/q3dbars.cpp b/src/datavis3d/engine/q3dbars.cpp index 9d3ab7fa..374c256b 100644 --- a/src/datavis3d/engine/q3dbars.cpp +++ b/src/datavis3d/engine/q3dbars.cpp @@ -97,6 +97,8 @@ Q3DBars::Q3DBars() d_ptr->m_shared->initializeOpenGL(); QObject::connect(d_ptr->m_shared, &Bars3DController::selectedBarPosChanged, this, &Q3DBars::selectedBarPosChanged); + QObject::connect(d_ptr->m_shared, &Abstract3DController::needRender, this, + &Q3DWindow::renderLater); } /*! diff --git a/src/datavis3d/engine/q3dscatter.cpp b/src/datavis3d/engine/q3dscatter.cpp index f44d6c44..e18a7cd2 100644 --- a/src/datavis3d/engine/q3dscatter.cpp +++ b/src/datavis3d/engine/q3dscatter.cpp @@ -89,6 +89,8 @@ Q3DScatter::Q3DScatter() d_ptr->m_shared->initializeOpenGL(); QObject::connect(d_ptr->m_shared, &Scatter3DController::selectedItemIndexChanged, this, &Q3DScatter::selectedItemIndexChanged); + QObject::connect(d_ptr->m_shared, &Abstract3DController::needRender, this, + &Q3DWindow::renderLater); } /*! diff --git a/src/datavis3d/engine/q3dsurface.cpp b/src/datavis3d/engine/q3dsurface.cpp index 3426b2fe..19b5cc54 100644 --- a/src/datavis3d/engine/q3dsurface.cpp +++ b/src/datavis3d/engine/q3dsurface.cpp @@ -30,6 +30,8 @@ Q3DSurface::Q3DSurface() : d_ptr(new Q3DSurfacePrivate(this, geometry())) { d_ptr->m_shared->initializeOpenGL(); + QObject::connect(d_ptr->m_shared, &Abstract3DController::needRender, this, + &Q3DWindow::renderLater); } Q3DSurface::~Q3DSurface() diff --git a/src/datavis3d/engine/q3dwindow.cpp b/src/datavis3d/engine/q3dwindow.cpp index 459fc6d8..5e5350de 100644 --- a/src/datavis3d/engine/q3dwindow.cpp +++ b/src/datavis3d/engine/q3dwindow.cpp @@ -80,7 +80,7 @@ Q3DWindow::Q3DWindow(QWindow *parent) if (splitversionstr[0].toFloat() < 1.2) qFatal("GLSL version must be 1.20 or higher. Try installing latest display drivers."); #endif - setAnimating(true); + renderLater(); } /*! @@ -148,26 +148,11 @@ void Q3DWindow::renderNow() render(); d_ptr->m_context->swapBuffers(this); - - if (d_ptr->m_animating) - renderLater(); -} - -/*! - * \internal - */ -void Q3DWindow::setAnimating(bool animating) -{ - d_ptr->m_animating = animating; - - if (animating) - renderLater(); } Q3DWindowPrivate::Q3DWindowPrivate(Q3DWindow *q) : q_ptr(q), m_updatePending(false), - m_animating(false), m_context(new QOpenGLContext(q)) { } diff --git a/src/datavis3d/engine/q3dwindow.h b/src/datavis3d/engine/q3dwindow.h index e9f8fe1d..fb0279c2 100644 --- a/src/datavis3d/engine/q3dwindow.h +++ b/src/datavis3d/engine/q3dwindow.h @@ -38,22 +38,22 @@ public: explicit Q3DWindow(QWindow *parent = 0); ~Q3DWindow(); -private slots: +protected slots: void renderLater(); void renderNow(); protected: virtual void render(); - void setAnimating(bool animating); bool event(QEvent *event); void exposeEvent(QExposeEvent *event); private: QScopedPointer<Q3DWindowPrivate> d_ptr; - friend class Q3DBarsPrivate; friend class Q3DBars; + friend class Q3DScatter; + friend class Q3DSurface; }; QT_DATAVIS3D_END_NAMESPACE diff --git a/src/datavis3d/engine/q3dwindow_p.h b/src/datavis3d/engine/q3dwindow_p.h index d32facfa..f5a614bf 100644 --- a/src/datavis3d/engine/q3dwindow_p.h +++ b/src/datavis3d/engine/q3dwindow_p.h @@ -48,7 +48,6 @@ public: Q3DWindow *q_ptr; bool m_updatePending; - bool m_animating; QOpenGLContext *m_context; }; diff --git a/src/datavis3d/engine/scatter3dcontroller.cpp b/src/datavis3d/engine/scatter3dcontroller.cpp index 10fa1d14..93070014 100644 --- a/src/datavis3d/engine/scatter3dcontroller.cpp +++ b/src/datavis3d/engine/scatter3dcontroller.cpp @@ -66,6 +66,7 @@ void Scatter3DController::initializeOpenGL() QObject::connect(m_renderer, &Scatter3DRenderer::selectedItemIndexChanged, this, &Scatter3DController::handleSelectedItemIndexChanged, Qt::QueuedConnection); + emitNeedRender(); } void Scatter3DController::synchDataToRenderer() @@ -112,7 +113,7 @@ void Scatter3DController::setSlicingActive(bool isSlicing) m_isSlicingActivated = isSlicing; m_changeTracker.slicingActiveChanged = true; - emit slicingActiveChanged(m_isSlicingActivated); + emitNeedRender(); } Scatter3DController::MouseState Scatter3DController::mouseState() @@ -127,6 +128,7 @@ void Scatter3DController::mouseDoubleClickEvent(QMouseEvent *event) m_mouseState = Scatter3DController::MouseOnScene; // update mouse positions to prevent jumping when releasing or repressing a button m_mousePos = event->pos(); + emitNeedRender(); } } @@ -197,6 +199,7 @@ void Scatter3DController::mousePressEvent(QMouseEvent *event, const QPoint &mous m_mousePos = mousePos; } m_cameraHelper->updateMousePos(m_mousePos); + emitNeedRender(); } void Scatter3DController::mouseReleaseEvent(QMouseEvent *event, const QPoint &mousePos) @@ -206,6 +209,7 @@ void Scatter3DController::mouseReleaseEvent(QMouseEvent *event, const QPoint &mo // update mouse positions to prevent jumping when releasing or repressing a button m_mousePos = mousePos; m_cameraHelper->updateMousePos(mousePos); + emitNeedRender(); } m_mouseState = Scatter3DController::MouseNone; } @@ -213,8 +217,10 @@ void Scatter3DController::mouseReleaseEvent(QMouseEvent *event, const QPoint &mo void Scatter3DController::mouseMoveEvent(QMouseEvent *event, const QPoint &mousePos) { Q_UNUSED(event); - if (Scatter3DController::MouseRotating == m_mouseState) + if (Scatter3DController::MouseRotating == m_mouseState) { m_mousePos = mousePos; + emitNeedRender(); + } } void Scatter3DController::wheelEvent(QWheelEvent *event) @@ -260,7 +266,6 @@ void Scatter3DController::setActiveDataProxy(QAbstractDataProxy *proxy) this, &Scatter3DController::handleItemsInserted); adjustValueAxisRange(); - m_isDataDirty = true; setSelectedItemIndex(noSelectionIndex()); } @@ -270,6 +275,7 @@ void Scatter3DController::handleArrayReset() adjustValueAxisRange(); m_isDataDirty = true; setSelectedItemIndex(noSelectionIndex()); + emitNeedRender(); } void Scatter3DController::handleItemsAdded(int startIndex, int count) @@ -279,6 +285,7 @@ void Scatter3DController::handleItemsAdded(int startIndex, int count) // TODO should dirty only affected values? adjustValueAxisRange(); m_isDataDirty = true; + emitNeedRender(); } void Scatter3DController::handleItemsChanged(int startIndex, int count) @@ -288,6 +295,7 @@ void Scatter3DController::handleItemsChanged(int startIndex, int count) // TODO should dirty only affected values? adjustValueAxisRange(); m_isDataDirty = true; + emitNeedRender(); } void Scatter3DController::handleItemsRemoved(int startIndex, int count) @@ -299,6 +307,7 @@ void Scatter3DController::handleItemsRemoved(int startIndex, int count) m_isDataDirty = true; if (startIndex >= static_cast<QScatterDataProxy *>(m_data)->itemCount()) setSelectedItemIndex(noSelectionIndex()); + emitNeedRender(); } void Scatter3DController::handleItemsInserted(int startIndex, int count) @@ -308,6 +317,7 @@ void Scatter3DController::handleItemsInserted(int startIndex, int count) // TODO should dirty only affected values? adjustValueAxisRange(); m_isDataDirty = true; + emitNeedRender(); } void Scatter3DController::handleSelectedItemIndexChanged(int index) @@ -315,6 +325,7 @@ void Scatter3DController::handleSelectedItemIndexChanged(int index) if (index != m_selectedItemIndex) { m_selectedItemIndex = index; emit selectedItemIndexChanged(index); + emitNeedRender(); } } @@ -365,6 +376,7 @@ void Scatter3DController::setSelectedItemIndex(int index) m_selectedItemIndex = index; m_changeTracker.selectedItemIndexChanged = true; emit selectedItemIndexChanged(index); + emitNeedRender(); } } diff --git a/src/datavis3d/engine/scatter3dcontroller_p.h b/src/datavis3d/engine/scatter3dcontroller_p.h index 7a535ae3..97fdeb4c 100644 --- a/src/datavis3d/engine/scatter3dcontroller_p.h +++ b/src/datavis3d/engine/scatter3dcontroller_p.h @@ -115,7 +115,6 @@ public slots: void handleSelectedItemIndexChanged(int index); signals: - void slicingActiveChanged(bool isSlicing); void selectedItemIndexChanged(int index); private: diff --git a/src/datavis3d/engine/surface3dcontroller.cpp b/src/datavis3d/engine/surface3dcontroller.cpp index f5dec25e..ae383384 100644 --- a/src/datavis3d/engine/surface3dcontroller.cpp +++ b/src/datavis3d/engine/surface3dcontroller.cpp @@ -59,6 +59,7 @@ void Surface3DController::initializeOpenGL() m_renderer = new Surface3DRenderer(this); setRenderer(m_renderer); synchDataToRenderer(); + emitNeedRender(); } void Surface3DController::synchDataToRenderer() @@ -92,6 +93,7 @@ void Surface3DController::setSmoothSurface(bool enable) { m_smoothSurface = enable; emit smoothStatusChanged(m_smoothSurface); + emitNeedRender(); } bool Surface3DController::smoothSurface() @@ -103,6 +105,7 @@ void Surface3DController::setSurfaceGrid(bool enable) { m_surfaceGrid = enable; emit surfaceGridChanged(m_surfaceGrid); + emitNeedRender(); } bool Surface3DController::surfaceGrid() @@ -137,6 +140,7 @@ void Surface3DController::mousePressEvent(QMouseEvent *event, const QPoint &mous m_mousePos = mousePos; //event->pos(); } m_cameraHelper->updateMousePos(m_mousePos); + emitNeedRender(); } void Surface3DController::mouseReleaseEvent(QMouseEvent *event, const QPoint &mousePos) @@ -146,6 +150,7 @@ void Surface3DController::mouseReleaseEvent(QMouseEvent *event, const QPoint &mo // update mouse positions to prevent jumping when releasing or repressing a button m_mousePos = mousePos; //event->pos(); m_cameraHelper->updateMousePos(mousePos); //event->pos()); + emitNeedRender(); } m_mouseState = Abstract3DController::MouseNone; } @@ -153,8 +158,10 @@ void Surface3DController::mouseReleaseEvent(QMouseEvent *event, const QPoint &mo void Surface3DController::mouseMoveEvent(QMouseEvent *event, const QPoint &mousePos) { Q_UNUSED(event) - if (Abstract3DController::MouseRotating == m_mouseState) + if (Abstract3DController::MouseRotating == m_mouseState) { m_mousePos = mousePos; //event->pos(); + emitNeedRender(); + } } void Surface3DController::wheelEvent(QWheelEvent *event) @@ -174,13 +181,14 @@ void Surface3DController::setSegmentCount(GLint segmentCount, GLfloat step, GLfl m_segmentMinimum = minimum; emit segmentCountChanged(m_segmentCount, m_segmentStep, m_segmentMinimum); + emitNeedRender(); } void Surface3DController::setGradientColorAt(qreal pos, const QColor &color) { Theme t = theme(); t.m_surfaceGradient.setColorAt(pos, color); - emit themeChanged(t); + emitNeedRender(); } // TODO: Temp @@ -192,6 +200,7 @@ void Surface3DController::setData(QList<qreal> series, int width, int depth) m_renderer->setXZStuff(width, depth); m_renderer->setSeries(series); + emitNeedRender(); } QT_DATAVIS3D_END_NAMESPACE diff --git a/src/datavis3dqml2/declarativebarsrenderer.cpp b/src/datavis3dqml2/declarativebarsrenderer.cpp index 4a76f70f..062dc951 100644 --- a/src/datavis3dqml2/declarativebarsrenderer.cpp +++ b/src/datavis3dqml2/declarativebarsrenderer.cpp @@ -29,8 +29,12 @@ DeclarativeBarsRenderer::DeclarativeBarsRenderer(QQuickWindow *window, Bars3DCon m_window(window), m_barsRenderer(renderer) { - connect(m_window, SIGNAL(beforeSynchronizing()), this, SLOT(synchDataToRenderer()), Qt::DirectConnection); - connect(m_window, SIGNAL(beforeRendering()), this, SLOT(renderFBO()), Qt::DirectConnection); + connect(m_window, &QQuickWindow::beforeSynchronizing, this, + &DeclarativeBarsRenderer::synchDataToRenderer, Qt::DirectConnection); + connect(m_window, &QQuickWindow::beforeRendering, this, + &DeclarativeBarsRenderer::renderFBO, Qt::DirectConnection); + connect(m_barsRenderer, &Abstract3DController::needRender, m_window, + &QQuickWindow::update); } DeclarativeBarsRenderer::~DeclarativeBarsRenderer() @@ -78,9 +82,6 @@ void DeclarativeBarsRenderer::renderFBO() m_barsRenderer->render(m_fbo->handle()); m_fbo->release(); - - // New view is in the FBO, request repaint of scene graph - m_window->update(); } QT_DATAVIS3D_END_NAMESPACE diff --git a/src/datavis3dqml2/declarativescatterrenderer.cpp b/src/datavis3dqml2/declarativescatterrenderer.cpp index 23c59c26..fead0039 100644 --- a/src/datavis3dqml2/declarativescatterrenderer.cpp +++ b/src/datavis3dqml2/declarativescatterrenderer.cpp @@ -30,8 +30,12 @@ DeclarativeScatterRenderer::DeclarativeScatterRenderer(QQuickWindow *window, m_window(window), m_scatterRenderer(renderer) { - connect(m_window, SIGNAL(beforeSynchronizing()), this, SLOT(synchDataToRenderer()), Qt::DirectConnection); - connect(m_window, SIGNAL(beforeRendering()), this, SLOT(renderFBO()), Qt::DirectConnection); + connect(m_window, &QQuickWindow::beforeSynchronizing, this, + &DeclarativeScatterRenderer::synchDataToRenderer, Qt::DirectConnection); + connect(m_window, &QQuickWindow::beforeRendering, this, + &DeclarativeScatterRenderer::renderFBO, Qt::DirectConnection); + connect(m_scatterRenderer, &Abstract3DController::needRender, m_window, + &QQuickWindow::update); } DeclarativeScatterRenderer::~DeclarativeScatterRenderer() @@ -79,9 +83,6 @@ void DeclarativeScatterRenderer::renderFBO() m_scatterRenderer->render(m_fbo->handle()); m_fbo->release(); - - // New view is in the FBO, request repaint of scene graph - m_window->update(); } QT_DATAVIS3D_END_NAMESPACE |