diff options
author | Miikka Heikkinen <miikka.heikkinen@theqtcompany.com> | 2015-10-20 13:18:59 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@theqtcompany.com> | 2015-10-22 10:08:51 +0000 |
commit | 31f9c57bc50ae053cfaf039a1dfdb128e2494458 (patch) | |
tree | 316138cb73c49877f5a80a8496c2f1b737122fb5 /src/datavisualizationqml2/declarativerendernode.cpp | |
parent | 4162ddeb02ee41fd4217d7f3d93d45cab3313ba8 (diff) |
Fix issues with COIN builds
-Fix miscellaneous compile errors
-Move manual tests to manual folder and enable export of autotests
-Added widgets requirement
-Fixed autotests
-Fixed renderer and controller synchronization in QML case
-Treat fallback Mesa as ES2 similar to setting AA_UseSoftwareOpenGL
Change-Id: If6619733725d079e339bef16262e5ea1450ab20f
Reviewed-by: Tomi Korpipää <tomi.korpipaa@theqtcompany.com>
Diffstat (limited to 'src/datavisualizationqml2/declarativerendernode.cpp')
-rw-r--r-- | src/datavisualizationqml2/declarativerendernode.cpp | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/datavisualizationqml2/declarativerendernode.cpp b/src/datavisualizationqml2/declarativerendernode.cpp index ba6a9367..9ce25bf6 100644 --- a/src/datavisualizationqml2/declarativerendernode.cpp +++ b/src/datavisualizationqml2/declarativerendernode.cpp @@ -22,10 +22,12 @@ #include "declarativerendernode_p.h" #include "abstractdeclarative_p.h" #include <QtGui/QOpenGLFramebufferObject> +#include <QtCore/QMutexLocker> QT_BEGIN_NAMESPACE_DATAVISUALIZATION -DeclarativeRenderNode::DeclarativeRenderNode(AbstractDeclarative *declarative) +DeclarativeRenderNode::DeclarativeRenderNode(AbstractDeclarative *declarative, + const QSharedPointer<QMutex> &nodeMutex) : QSGGeometryNode(), m_geometry(QSGGeometry::defaultAttributes_TexturedPoint2D(), 4), m_texture(0), @@ -37,6 +39,7 @@ DeclarativeRenderNode::DeclarativeRenderNode(AbstractDeclarative *declarative) m_samples(0), m_dirtyFBO(false) { + m_nodeMutex = nodeMutex; setMaterial(&m_material); setOpaqueMaterial(&m_materialO); setGeometry(&m_geometry); @@ -48,6 +51,8 @@ DeclarativeRenderNode::~DeclarativeRenderNode() delete m_fbo; delete m_multisampledFBO; delete m_texture; + + m_nodeMutex.clear(); } void DeclarativeRenderNode::setSize(const QSize &size) @@ -116,7 +121,12 @@ void DeclarativeRenderNode::setQuickWindow(QQuickWindow *window) void DeclarativeRenderNode::setController(Abstract3DController *controller) { + QMutexLocker locker(m_nodeMutex.data()); m_controller = controller; + if (m_controller) { + connect(m_controller, &QObject::destroyed, + this, &DeclarativeRenderNode::handleControllerDestroyed, Qt::DirectConnection); + } } void DeclarativeRenderNode::setSamples(int samples) @@ -130,6 +140,11 @@ void DeclarativeRenderNode::setSamples(int samples) void DeclarativeRenderNode::preprocess() { + QMutexLocker locker(m_nodeMutex.data()); + + if (!m_controller) + return; + QOpenGLFramebufferObject *targetFBO; if (m_samples > 0) targetFBO = m_multisampledFBO; @@ -150,4 +165,10 @@ void DeclarativeRenderNode::preprocess() m_declarative->doneOpenGLContext(m_window); } +// This function is called within m_nodeMutex lock +void DeclarativeRenderNode::handleControllerDestroyed() +{ + m_controller = 0; +} + QT_END_NAMESPACE_DATAVISUALIZATION |