summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2013-09-03 13:26:07 +0300
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2013-09-03 14:06:03 +0300
commit58979c740aa4814692e6555840e2fe4d3913561b (patch)
treeb5b50b44011fa49788d84808c4d4e25db46599c4 /src
parent5eedaa018b6a1b1527b523d3018ac026af29eb33 (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>
Diffstat (limited to 'src')
-rw-r--r--src/datavis3d/engine/abstract3dcontroller.cpp59
-rw-r--r--src/datavis3d/engine/abstract3dcontroller_p.h16
-rw-r--r--src/datavis3d/engine/bars3dcontroller.cpp23
-rw-r--r--src/datavis3d/engine/bars3dcontroller_p.h3
-rw-r--r--src/datavis3d/engine/q3dbars.cpp2
-rw-r--r--src/datavis3d/engine/q3dscatter.cpp2
-rw-r--r--src/datavis3d/engine/q3dsurface.cpp2
-rw-r--r--src/datavis3d/engine/q3dwindow.cpp17
-rw-r--r--src/datavis3d/engine/q3dwindow.h6
-rw-r--r--src/datavis3d/engine/q3dwindow_p.h1
-rw-r--r--src/datavis3d/engine/scatter3dcontroller.cpp18
-rw-r--r--src/datavis3d/engine/scatter3dcontroller_p.h1
-rw-r--r--src/datavis3d/engine/surface3dcontroller.cpp13
-rw-r--r--src/datavis3dqml2/declarativebarsrenderer.cpp11
-rw-r--r--src/datavis3dqml2/declarativescatterrenderer.cpp11
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