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 | |
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')
8 files changed, 55 insertions, 8 deletions
diff --git a/src/datavisualizationqml2/abstractdeclarative.cpp b/src/datavisualizationqml2/abstractdeclarative.cpp index 175215d8..59511163 100644 --- a/src/datavisualizationqml2/abstractdeclarative.cpp +++ b/src/datavisualizationqml2/abstractdeclarative.cpp @@ -53,6 +53,8 @@ AbstractDeclarative::AbstractDeclarative(QQuickItem *parent) : m_mainThread(QThread::currentThread()), m_contextThread(0) { + m_nodeMutex = QSharedPointer<QMutex>(new QMutex); + connect(this, &QQuickItem::windowChanged, this, &AbstractDeclarative::handleWindowChanged); // Set contents to false in case we are in qml designer to make component look nice @@ -66,6 +68,8 @@ AbstractDeclarative::~AbstractDeclarative() disconnect(this, 0, this, 0); checkWindowList(0); + + m_nodeMutex.clear(); } void AbstractDeclarative::setRenderingMode(AbstractDeclarative::RenderingMode mode) @@ -133,7 +137,7 @@ QSGNode *AbstractDeclarative::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeD DeclarativeRenderNode *node = static_cast<DeclarativeRenderNode *>(oldNode); if (!node) { - node = new DeclarativeRenderNode(this); + node = new DeclarativeRenderNode(this, m_nodeMutex); node->setController(m_controller.data()); node->setQuickWindow(window()); } @@ -215,7 +219,7 @@ void AbstractDeclarative::removeCustomItemAt(const QVector3D &position) void AbstractDeclarative::releaseCustomItem(QCustom3DItem *item) { - return m_controller->releaseCustomItem(item); + m_controller->releaseCustomItem(item); } int AbstractDeclarative::selectedLabelIndex() const diff --git a/src/datavisualizationqml2/abstractdeclarative_p.h b/src/datavisualizationqml2/abstractdeclarative_p.h index bc99f25b..c4152619 100644 --- a/src/datavisualizationqml2/abstractdeclarative_p.h +++ b/src/datavisualizationqml2/abstractdeclarative_p.h @@ -39,6 +39,8 @@ #include <QtQuick/QQuickItem> #include <QtCore/QPointer> #include <QtCore/QThread> +#include <QtCore/QMutex> +#include <QtCore/QSharedPointer> #if !defined(Q_OS_MAC) && !defined(Q_OS_ANDROID) && !defined(Q_OS_WINRT) #define USE_SHARED_CONTEXT @@ -50,8 +52,6 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION -class DeclarativeRenderNode; - class AbstractDeclarative : public QQuickItem { Q_OBJECT @@ -274,6 +274,9 @@ Q_SIGNALS: Q_REVISION(2) void queriedGraphPositionChanged(const QVector3D &data); Q_REVISION(2) void marginChanged(qreal margin); +protected: + QSharedPointer<QMutex> m_nodeMutex; + private: QPointer<Abstract3DController> m_controller; QRectF m_cachedGeometry; diff --git a/src/datavisualizationqml2/datavisualizationqml2.pro b/src/datavisualizationqml2/datavisualizationqml2.pro index 332a4cf8..d26a22b6 100644 --- a/src/datavisualizationqml2/datavisualizationqml2.pro +++ b/src/datavisualizationqml2/datavisualizationqml2.pro @@ -14,7 +14,9 @@ INCLUDEPATH += ../../include \ ../datavisualization/engine \ ../datavisualization/global \ ../datavisualization/data \ - ../datavisualization/theme + ../datavisualization/theme \ + ../datavisualization/axis \ + ../datavisualization/input SOURCES += \ datavisualizationqml2_plugin.cpp \ diff --git a/src/datavisualizationqml2/declarativebars.cpp b/src/datavisualizationqml2/declarativebars.cpp index 95998055..1b5e91a9 100644 --- a/src/datavisualizationqml2/declarativebars.cpp +++ b/src/datavisualizationqml2/declarativebars.cpp @@ -20,6 +20,7 @@ ******************************************************************************/ #include "declarativebars_p.h" +#include <QtCore/QMutexLocker> QT_BEGIN_NAMESPACE_DATAVISUALIZATION @@ -41,6 +42,7 @@ DeclarativeBars::DeclarativeBars(QQuickItem *parent) DeclarativeBars::~DeclarativeBars() { + QMutexLocker locker(m_nodeMutex.data()); delete m_barsController; } 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 diff --git a/src/datavisualizationqml2/declarativerendernode_p.h b/src/datavisualizationqml2/declarativerendernode_p.h index d284813b..a4fd910c 100644 --- a/src/datavisualizationqml2/declarativerendernode_p.h +++ b/src/datavisualizationqml2/declarativerendernode_p.h @@ -37,16 +37,21 @@ #include <QtQuick/QSGGeometryNode> #include <QtQuick/QSGTextureMaterial> #include <QtQuick/QQuickWindow> +#include <QtCore/QMutex> +#include <QtCore/QSharedPointer> +#include <QtCore/QObject> QT_BEGIN_NAMESPACE_DATAVISUALIZATION class Abstract3DController; class AbstractDeclarative; -class DeclarativeRenderNode : public QSGGeometryNode +class DeclarativeRenderNode : public QObject, public QSGGeometryNode { + Q_OBJECT public: - DeclarativeRenderNode(AbstractDeclarative *declarative); + DeclarativeRenderNode(AbstractDeclarative *declarative, + const QSharedPointer<QMutex> &nodeMutex); ~DeclarativeRenderNode(); void setSize(const QSize &size); @@ -61,6 +66,9 @@ public: void preprocess(); +public Q_SLOTS: + void handleControllerDestroyed(); + private: QSGTextureMaterial m_material; QSGOpaqueTextureMaterial m_materialO; @@ -76,6 +84,9 @@ private: int m_samples; bool m_dirtyFBO; + + QSharedPointer<QMutex> m_nodeMutex; + }; QT_END_NAMESPACE_DATAVISUALIZATION diff --git a/src/datavisualizationqml2/declarativescatter.cpp b/src/datavisualizationqml2/declarativescatter.cpp index fba6d6c7..23653313 100644 --- a/src/datavisualizationqml2/declarativescatter.cpp +++ b/src/datavisualizationqml2/declarativescatter.cpp @@ -20,6 +20,7 @@ ******************************************************************************/ #include "declarativescatter_p.h" +#include <QtCore/QMutexLocker> QT_BEGIN_NAMESPACE_DATAVISUALIZATION @@ -39,6 +40,7 @@ DeclarativeScatter::DeclarativeScatter(QQuickItem *parent) DeclarativeScatter::~DeclarativeScatter() { + QMutexLocker locker(m_nodeMutex.data()); delete m_scatterController; } diff --git a/src/datavisualizationqml2/declarativesurface.cpp b/src/datavisualizationqml2/declarativesurface.cpp index 06ae802d..f15f51a6 100644 --- a/src/datavisualizationqml2/declarativesurface.cpp +++ b/src/datavisualizationqml2/declarativesurface.cpp @@ -20,6 +20,7 @@ ******************************************************************************/ #include "declarativesurface_p.h" +#include <QtCore/QMutexLocker> QT_BEGIN_NAMESPACE_DATAVISUALIZATION @@ -41,6 +42,7 @@ DeclarativeSurface::DeclarativeSurface(QQuickItem *parent) DeclarativeSurface::~DeclarativeSurface() { + QMutexLocker locker(m_nodeMutex.data()); delete m_surfaceController; } |