summaryrefslogtreecommitdiffstats
path: root/src/datavisualizationqml2
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@theqtcompany.com>2015-10-20 13:18:59 +0300
committerMiikka Heikkinen <miikka.heikkinen@theqtcompany.com>2015-10-22 10:08:51 +0000
commit31f9c57bc50ae053cfaf039a1dfdb128e2494458 (patch)
tree316138cb73c49877f5a80a8496c2f1b737122fb5 /src/datavisualizationqml2
parent4162ddeb02ee41fd4217d7f3d93d45cab3313ba8 (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')
-rw-r--r--src/datavisualizationqml2/abstractdeclarative.cpp8
-rw-r--r--src/datavisualizationqml2/abstractdeclarative_p.h7
-rw-r--r--src/datavisualizationqml2/datavisualizationqml2.pro4
-rw-r--r--src/datavisualizationqml2/declarativebars.cpp2
-rw-r--r--src/datavisualizationqml2/declarativerendernode.cpp23
-rw-r--r--src/datavisualizationqml2/declarativerendernode_p.h15
-rw-r--r--src/datavisualizationqml2/declarativescatter.cpp2
-rw-r--r--src/datavisualizationqml2/declarativesurface.cpp2
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;
}