summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/abstract3dcontroller.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavisualization/engine/abstract3dcontroller.cpp')
-rw-r--r--src/datavisualization/engine/abstract3dcontroller.cpp39
1 files changed, 33 insertions, 6 deletions
diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp
index a6081960..9283ccb4 100644
--- a/src/datavisualization/engine/abstract3dcontroller.cpp
+++ b/src/datavisualization/engine/abstract3dcontroller.cpp
@@ -52,7 +52,10 @@ Abstract3DController::Abstract3DController(QRect initialViewport, Q3DScene *scen
m_isDataDirty(true),
m_isSeriesVisibilityDirty(true),
m_isSeriesVisualsDirty(true),
- m_renderPending(false)
+ m_renderPending(false),
+ m_measureFps(false),
+ m_numFrames(0),
+ m_currentFps(0.0)
{
if (!m_scene)
m_scene = new Q3DScene;
@@ -373,12 +376,21 @@ void Abstract3DController::render(const GLuint defaultFboHandle)
if (!m_renderer)
return;
- m_renderer->render(defaultFboHandle);
+ if (m_measureFps) {
+ // Measure speed (as milliseconds per frame)
+ m_numFrames++;
+ int elapsed = m_frameTimer.elapsed();
+ if (elapsed >= 1000) {
+ m_currentFps = qreal(m_numFrames) * 1000.0 / qreal(elapsed);
+ emit currentFpsChanged(m_currentFps);
+ m_numFrames = 0;
+ m_frameTimer.restart();
+ }
+ // To get meaningful framerate, don't just do render on demand.
+ emitNeedRender();
+ }
-#ifdef DISPLAY_RENDER_SPEED
- // To get meaningful framerate, don't just do render on demand.
- emitNeedRender();
-#endif
+ m_renderer->render(defaultFboHandle);
}
void Abstract3DController::mouseDoubleClickEvent(QMouseEvent *event)
@@ -952,6 +964,21 @@ void Abstract3DController::handleRequestShadowQuality(QAbstract3DGraph::ShadowQu
setShadowQuality(quality);
}
+void Abstract3DController::setMeasureFps(bool enable)
+{
+ if (m_measureFps != enable) {
+ m_measureFps = enable;
+ m_currentFps = 0.0;
+
+ if (enable) {
+ m_frameTimer.start();
+ m_numFrames = -1;
+ emitNeedRender();
+ }
+ emit measureFpsChanged(enable);
+ }
+}
+
void Abstract3DController::handleAxisLabelFormatChangedBySender(QObject *sender)
{
// Label format changing needs to dirty the data so that labels are reset.