diff options
Diffstat (limited to 'src/datavisualization/engine/abstract3dcontroller.cpp')
-rw-r--r-- | src/datavisualization/engine/abstract3dcontroller.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp index 7a592e04..1c8c0958 100644 --- a/src/datavisualization/engine/abstract3dcontroller.cpp +++ b/src/datavisualization/engine/abstract3dcontroller.cpp @@ -31,6 +31,7 @@ #include "utils_p.h" #include <QtCore/QThread> #include <QtGui/QOpenGLFramebufferObject> +#include <QtCore/QMutexLocker> QT_BEGIN_NAMESPACE_DATAVISUALIZATION @@ -103,6 +104,7 @@ Abstract3DController::~Abstract3DController() void Abstract3DController::destroyRenderer() { + QMutexLocker mutexLocker(&m_renderMutex); // Renderer can be in another thread, don't delete it directly in that case if (m_renderer && m_renderer->thread() && m_renderer->thread() != this->thread()) m_renderer->deleteLater(); @@ -117,6 +119,7 @@ void Abstract3DController::destroyRenderer() */ void Abstract3DController::setRenderer(Abstract3DRenderer *renderer) { + // Note: This function must be called within render mutex m_renderer = renderer; // If renderer is created in different thread than controller, make sure renderer gets @@ -527,6 +530,8 @@ void Abstract3DController::synchDataToRenderer() void Abstract3DController::render(const GLuint defaultFboHandle) { + QMutexLocker mutexLocker(&m_renderMutex); + // If not initialized, do nothing. if (!m_renderer) return; @@ -978,6 +983,7 @@ void Abstract3DController::markSeriesVisualsDirty() void Abstract3DController::requestRender(QOpenGLFramebufferObject *fbo) { + QMutexLocker mutexLocker(&m_renderMutex); m_renderer->render(fbo->handle()); } |