diff options
author | Miikka Heikkinen <miikka.heikkinen@theqtcompany.com> | 2014-11-06 10:46:49 +0200 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@theqtcompany.com> | 2014-11-06 10:48:41 +0200 |
commit | bc317e1ea56c85a41413a5ddde4112623a1b4913 (patch) | |
tree | e51b2b78f81940cfc70b49953308197080cd368f | |
parent | 03cbebd97354b7251e87dcde8adc6b49eba973e5 (diff) | |
parent | 46ef32d424d7e0209e52528286e31f656c654289 (diff) |
Merge branch 'develop'
Change-Id: I2f27b074a095cd449a92778be4681f5e56590e17
23 files changed, 232 insertions, 105 deletions
@@ -88,4 +88,5 @@ Known Issues "QT += datavisualization" in the pro file. This is because Qt Data Visualization QML plugin has a dependency to Qt Data Visualization C++ library, which Qt Creator doesn't automatically add to the deployment package. - +- Only OpenGL ES2 emulation is available for software renderer (that is, when using + QCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL)) diff --git a/examples/datavisualization/qmloscilloscope/datasource.cpp b/examples/datavisualization/qmloscilloscope/datasource.cpp index f466b2b0..353c878b 100644 --- a/examples/datavisualization/qmloscilloscope/datasource.cpp +++ b/examples/datavisualization/qmloscilloscope/datasource.cpp @@ -45,7 +45,7 @@ void DataSource::generateData(int cacheCount, int rowCount, int columnCount, float xMin, float xMax, float yMin, float yMax, float zMin, float zMax) { - if (!cacheCount) + if (!cacheCount || !rowCount || !columnCount) return; clearData(); @@ -84,7 +84,7 @@ void DataSource::generateData(int cacheCount, int rowCount, int columnCount, float colWave = float(qSin((2.0 * M_PI * colMod) - (1.0 / 2.0 * M_PI)) + 1.0); float y = (colWave * ((float(qSin(rowColWaveAngleMul * colMod) + 1.0)))) * rowColWaveMul - + (0.15f * float(rand()) / float(RAND_MAX)) * yRangeMod; + + (0.15f * float(qrand()) / float(RAND_MAX)) * yRangeMod; int index = k + cacheIndexAdjustment; if (index >= columnCount) { diff --git a/examples/datavisualization/qmloscilloscope/qml/qmloscilloscope/main.qml b/examples/datavisualization/qmloscilloscope/qml/qmloscilloscope/main.qml index c2e6b70b..2ad43e97 100644 --- a/examples/datavisualization/qmloscilloscope/qml/qmloscilloscope/main.qml +++ b/examples/datavisualization/qmloscilloscope/qml/qmloscilloscope/main.qml @@ -150,7 +150,7 @@ Item { maximumValue: minimumValue * 10 stepSize: mainView.sampleCache updateValueWhileDragging: false - value: minimumValue * 2 + Component.onCompleted: value = minimumValue * 2 } Rectangle { diff --git a/src/datavisualization/data/labelitem.cpp b/src/datavisualization/data/labelitem.cpp index ec8ba3fd..4e0e9b5c 100644 --- a/src/datavisualization/data/labelitem.cpp +++ b/src/datavisualization/data/labelitem.cpp @@ -28,7 +28,7 @@ LabelItem::LabelItem() LabelItem::~LabelItem() { - QOpenGLContext::currentContext()->functions()->glDeleteTextures(1, &m_textureId); + clear(); } void LabelItem::setSize(const QSize &size) @@ -54,10 +54,9 @@ GLuint LabelItem::textureId() const void LabelItem::clear() { - if (m_textureId) { + if (m_textureId && QOpenGLContext::currentContext()) QOpenGLContext::currentContext()->functions()->glDeleteTextures(1, &m_textureId); - m_textureId = 0; - } + m_textureId = 0; m_size = QSize(0, 0); } diff --git a/src/datavisualization/doc/src/qtdatavisualization.qdoc b/src/datavisualization/doc/src/qtdatavisualization.qdoc index b07074b1..c243a1cd 100644 --- a/src/datavisualization/doc/src/qtdatavisualization.qdoc +++ b/src/datavisualization/doc/src/qtdatavisualization.qdoc @@ -338,6 +338,8 @@ "QT += datavisualization" in the pro file. This is because Qt Data Visualization QML plugin has a dependency to Qt Data Visualization C++ library, which Qt Creator doesn't automatically add to the deployment package. + \li Only OpenGL ES2 emulation is available for software renderer (that is, when using + QCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL)) \endlist */ diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp index cfc691af..fc3b4a19 100644 --- a/src/datavisualization/engine/abstract3drenderer.cpp +++ b/src/datavisualization/engine/abstract3drenderer.cpp @@ -28,7 +28,7 @@ #include "scatter3drenderer_p.h" #include <QtCore/qmath.h> -#include <QtGui/QWindow> +#include <QtGui/QOffscreenSurface> #include <QtCore/QThread> QT_BEGIN_NAMESPACE_DATAVISUALIZATION @@ -1789,8 +1789,7 @@ void Abstract3DRenderer::fixContextBeforeDelete() // Otherwise we expect it to be our shared context, so we can use it for cleanup. if (!QOpenGLContext::currentContext() && !m_context.isNull() && QThread::currentThread() == this->thread()) { - m_dummySurfaceAtDelete = new QWindow(); - m_dummySurfaceAtDelete->setSurfaceType(QWindow::OpenGLSurface); + m_dummySurfaceAtDelete = new QOffscreenSurface(); m_dummySurfaceAtDelete->setFormat(m_context->format()); m_dummySurfaceAtDelete->create(); diff --git a/src/datavisualization/engine/abstract3drenderer_p.h b/src/datavisualization/engine/abstract3drenderer_p.h index 1e38023d..15793797 100644 --- a/src/datavisualization/engine/abstract3drenderer_p.h +++ b/src/datavisualization/engine/abstract3drenderer_p.h @@ -39,7 +39,7 @@ #include "seriesrendercache_p.h" #include "customrenderitem_p.h" -class QSurface; +class QOffscreenSurface; QT_BEGIN_NAMESPACE_DATAVISUALIZATION @@ -327,7 +327,7 @@ protected: QOpenGLFunctions_2_1 *m_funcs_2_1; // Not owned #endif QPointer<QOpenGLContext> m_context; // Not owned - QWindow *m_dummySurfaceAtDelete; + QOffscreenSurface *m_dummySurfaceAtDelete; bool m_isOpenGLES; private: diff --git a/src/datavisualization/utils/qutils.h b/src/datavisualization/utils/qutils.h index d4acfc99..93226be9 100644 --- a/src/datavisualization/utils/qutils.h +++ b/src/datavisualization/utils/qutils.h @@ -20,29 +20,70 @@ #define QUTILS_H #include <QtGui/QSurfaceFormat> +#include <QtGui/QOpenGLContext> +#include <QtGui/QOffscreenSurface> +#include <QtCore/QCoreApplication> namespace QtDataVisualization { inline static QSurfaceFormat qDefaultSurfaceFormat(bool antialias = true) { + bool isES = false; + QSurfaceFormat surfaceFormat; + // Common attributes surfaceFormat.setDepthBufferSize(24); surfaceFormat.setStencilBufferSize(8); surfaceFormat.setSwapBehavior(QSurfaceFormat::DoubleBuffer); surfaceFormat.setRenderableType(QSurfaceFormat::DefaultRenderableType); + + QOpenGLContext *ctx = QOpenGLContext::currentContext(); + QOffscreenSurface *dummySurface = 0; + if (!ctx) { + dummySurface = new QOffscreenSurface(); + dummySurface->setFormat(surfaceFormat); + dummySurface->create(); + ctx = new QOpenGLContext; + ctx->setFormat(surfaceFormat); + ctx->create(); + ctx->makeCurrent(dummySurface); + } + #if defined(QT_OPENGL_ES_2) - // Antialias not supported for ES - antialias = false; - surfaceFormat.setRedBufferSize(8); - surfaceFormat.setBlueBufferSize(8); - surfaceFormat.setGreenBufferSize(8); + isES = true; +#elif (QT_VERSION < QT_VERSION_CHECK(5, 3, 0)) + isES = false; +#else + isES = ctx->isOpenGLES(); +#endif + + if (dummySurface) { + ctx->doneCurrent(); + delete ctx; + delete dummySurface; + } + +#if (QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)) + // We support only ES2 emulation with software renderer for now + if (QCoreApplication::testAttribute(Qt::AA_UseSoftwareOpenGL)) { + qWarning("Only OpenGL ES2 emulation is available for software rendering."); + isES = true; + } #endif - if (antialias) - surfaceFormat.setSamples(8); - else - surfaceFormat.setSamples(0); + if (isES) { + // For ES2 only attributes + surfaceFormat.setRedBufferSize(8); + surfaceFormat.setBlueBufferSize(8); + surfaceFormat.setGreenBufferSize(8); + } else { + // For OpenGL only attributes + if (antialias) + surfaceFormat.setSamples(8); + else + surfaceFormat.setSamples(0); + } return surfaceFormat; } diff --git a/src/datavisualization/utils/texturehelper.cpp b/src/datavisualization/utils/texturehelper.cpp index 3944fb0c..16396de7 100644 --- a/src/datavisualization/utils/texturehelper.cpp +++ b/src/datavisualization/utils/texturehelper.cpp @@ -58,7 +58,7 @@ GLuint TextureHelper::create2DTexture(const QImage &image, bool useTrilinearFilt QImage texImage = image; - if (!Utils::isOpenGLES()) { + if (Utils::isOpenGLES()) { GLuint imageWidth = Utils::getNearestPowerOfTwo(image.width()); GLuint imageHeight = Utils::getNearestPowerOfTwo(image.height()); if (smoothScale) { diff --git a/src/datavisualization/utils/utils.cpp b/src/datavisualization/utils/utils.cpp index 42a1e532..7f10bac7 100644 --- a/src/datavisualization/utils/utils.cpp +++ b/src/datavisualization/utils/utils.cpp @@ -21,14 +21,17 @@ #include <QtGui/QPainter> #include <QtGui/QOpenGLContext> -#include <QtGui/QWindow> +#include <QtGui/QOffscreenSurface> QT_BEGIN_NAMESPACE_DATAVISUALIZATION #define NUM_IN_POWER(y, x) for (;y<x;y<<=1) #define MIN_POWER 2 -static GLint maxTextureSize = 0; // Safe, as all instances have the same texture size +// Some values that only need to be resolved once +static bool staticsResolved = false; +static GLint maxTextureSize = 0; +static bool isES = false; GLuint Utils::getNearestPowerOfTwo(GLuint value) { @@ -58,10 +61,9 @@ QImage Utils::printTextToImage(const QFont &font, const QString &text, const QCo const QColor &txtColor, bool labelBackground, bool borders, int maxLabelWidth) { - if (maxTextureSize == 0) { - QOpenGLContext::currentContext()->functions()->glGetIntegerv( - GL_MAX_TEXTURE_SIZE, &maxTextureSize); - } + if (!staticsResolved) + resolveStatics(); + GLuint paddingWidth = 20; GLuint paddingHeight = 20; GLuint prePadding = 20; @@ -87,7 +89,7 @@ QImage Utils::printTextToImage(const QFont &font, const QString &text, const QCo // make a label with large empty space uint testWidth = getNearestPowerOfTwo(valueStrWidth + prePadding) >> 1; int diffToFit = (valueStrWidth + prePadding) - testWidth; - int maxSqueeze = int((valueStrWidth + prePadding) * 0.1f); + int maxSqueeze = int((valueStrWidth + prePadding) * 0.25f); if (diffToFit < maxSqueeze && maxTextureSize > GLint(testWidth)) targetWidth = testWidth; } @@ -317,39 +319,51 @@ QQuaternion Utils::calculateRotation(const QVector3D &xyzRotations) bool Utils::isOpenGLES() { + if (!staticsResolved) + resolveStatics(); + return isES; +} + +void Utils::resolveStatics() +{ + QOpenGLContext *ctx = QOpenGLContext::currentContext(); + QOffscreenSurface *dummySurface = 0; + if (!ctx) { + QSurfaceFormat surfaceFormat; + dummySurface = new QOffscreenSurface(); + dummySurface->setFormat(surfaceFormat); + dummySurface->create(); + ctx = new QOpenGLContext; + ctx->setFormat(surfaceFormat); + ctx->create(); + ctx->makeCurrent(dummySurface); + } + #if defined(QT_OPENGL_ES_2) - return true; + isES = true; #elif (QT_VERSION < QT_VERSION_CHECK(5, 3, 0)) - return false; + isES = false; #else - static bool resolved = false; - static bool isES = false; - if (!resolved) { - QOpenGLContext *ctx = QOpenGLContext::currentContext(); - QWindow *dummySurface = 0; - if (!ctx) { - QSurfaceFormat surfaceFormat = qDefaultSurfaceFormat(); - dummySurface = new QWindow(); - dummySurface->setSurfaceType(QWindow::OpenGLSurface); - dummySurface->setFormat(surfaceFormat); - dummySurface->create(); - ctx = new QOpenGLContext; - ctx->setFormat(surfaceFormat); - ctx->create(); - ctx->makeCurrent(dummySurface); - } + isES = ctx->isOpenGLES(); +#endif - isES = ctx->isOpenGLES(); - resolved = true; + ctx->functions()->glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTextureSize); - if (dummySurface) { - ctx->doneCurrent(); - delete ctx; - delete dummySurface; - } + if (dummySurface) { + ctx->doneCurrent(); + delete ctx; + delete dummySurface; + } + +#if (QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)) + // We support only ES2 emulation with software renderer for now + if (QCoreApplication::testAttribute(Qt::AA_UseSoftwareOpenGL)) { + qWarning("Only OpenGL ES2 emulation is available for software rendering."); + isES = true; } - return isES; #endif + + staticsResolved = true; } QT_END_NAMESPACE_DATAVISUALIZATION diff --git a/src/datavisualization/utils/utils_p.h b/src/datavisualization/utils/utils_p.h index 1a46c731..06895bcf 100644 --- a/src/datavisualization/utils/utils_p.h +++ b/src/datavisualization/utils/utils_p.h @@ -70,6 +70,7 @@ public: static float wrapValue(float value, float min, float max); static QQuaternion calculateRotation(const QVector3D &xyzRotations); static bool isOpenGLES(); + static void resolveStatics(); private: static ParamType mapFormatCharToParamType(char formatSpec); diff --git a/src/datavisualizationqml2/designer/Scatter3DSpecifics.qml b/src/datavisualizationqml2/designer/Scatter3DSpecifics.qml index 131f71fd..00dddcc2 100644 --- a/src/datavisualizationqml2/designer/Scatter3DSpecifics.qml +++ b/src/datavisualizationqml2/designer/Scatter3DSpecifics.qml @@ -159,7 +159,7 @@ Column { minimumValue: 0.0 maximumValue: 1.0 stepSize: 0.01 - decimals: 1 + decimals: 2 Layout.fillWidth: true } } diff --git a/src/datavisualizationqml2/designer/Surface3DSpecifics.qml b/src/datavisualizationqml2/designer/Surface3DSpecifics.qml index a834f677..9804c32c 100644 --- a/src/datavisualizationqml2/designer/Surface3DSpecifics.qml +++ b/src/datavisualizationqml2/designer/Surface3DSpecifics.qml @@ -277,7 +277,7 @@ Column { minimumValue: 0.0 maximumValue: 1.0 stepSize: 0.01 - decimals: 1 + decimals: 2 Layout.fillWidth: true } } diff --git a/src/datavisualizationqml2/glstatestore.cpp b/src/datavisualizationqml2/glstatestore.cpp index 973d5054..5775694d 100644 --- a/src/datavisualizationqml2/glstatestore.cpp +++ b/src/datavisualizationqml2/glstatestore.cpp @@ -57,7 +57,7 @@ GLStateStore::GLStateStore(QOpenGLContext *context, QObject *parent) : m_vertexAttribArrayTypes.reset(new GLint[maxVertexAttribs]); m_vertexAttribArrayNormalized.reset(new GLint[maxVertexAttribs]); m_vertexAttribArrayStrides.reset(new GLint[maxVertexAttribs]); - m_vertexAttribArrayOffsets.reset(new GLint[maxVertexAttribs]); + m_vertexAttribArrayOffsets.reset(new void *[maxVertexAttribs]); initGLDefaultState(); } @@ -336,7 +336,7 @@ void GLStateStore::restoreGLState() m_vertexAttribArrayTypes[i], m_vertexAttribArrayNormalized[i], m_vertexAttribArrayStrides[i], - (void *) m_vertexAttribArrayOffsets[i]); + m_vertexAttribArrayOffsets[i]); } glBindBuffer(GL_ARRAY_BUFFER, m_boundArrayBuffer); diff --git a/src/datavisualizationqml2/glstatestore_p.h b/src/datavisualizationqml2/glstatestore_p.h index 4add606b..48b30a15 100644 --- a/src/datavisualizationqml2/glstatestore_p.h +++ b/src/datavisualizationqml2/glstatestore_p.h @@ -71,7 +71,7 @@ public: QScopedArrayPointer<GLint> m_vertexAttribArrayTypes; QScopedArrayPointer<GLint> m_vertexAttribArrayNormalized; QScopedArrayPointer<GLint> m_vertexAttribArrayStrides; - QScopedArrayPointer<GLint> m_vertexAttribArrayOffsets; + QScopedArrayPointer<void *> m_vertexAttribArrayOffsets; GLint m_activeTexture; GLint m_texBinding2D; diff --git a/tests/auto/cpptest/q3dscene/tst_scene.cpp b/tests/auto/cpptest/q3dscene/tst_scene.cpp index 7d1ecad3..83eff9eb 100644 --- a/tests/auto/cpptest/q3dscene/tst_scene.cpp +++ b/tests/auto/cpptest/q3dscene/tst_scene.cpp @@ -136,7 +136,7 @@ void tst_scene::subViews() QCoreApplication::processEvents(); - QCOMPARE(scene->viewport(), QRect(0, 0, 200, 200)); + QTRY_COMPARE(scene->viewport(), QRect(0, 0, 200, 200)); QCOMPARE(scene->primarySubViewport(), QRect(0, 0, 200, 200)); QCOMPARE(scene->secondarySubViewport(), QRect(0, 0, 0, 0)); diff --git a/tests/barstest/main.cpp b/tests/barstest/main.cpp index af033990..1305fff9 100644 --- a/tests/barstest/main.cpp +++ b/tests/barstest/main.cpp @@ -35,22 +35,19 @@ #include <QLineEdit> #include <QSpinBox> #include <QtGui/QOpenGLContext> - -static bool isOpenGLES() -{ -#if defined(QT_OPENGL_ES_2) - return true; -#elif (QT_VERSION < QT_VERSION_CHECK(5, 3, 0)) - return false; -#else - return QOpenGLContext::currentContext()->isOpenGLES(); -#endif -} +#include <QtDataVisualization/QCustom3DItem> +#include <QtDataVisualization/QCustom3DLabel> +#include <QtDataVisualization/QCustom3DVolume> int main(int argc, char **argv) { QApplication app(argc, argv); + // Test creating custom items before graph is created + QCustom3DItem customItem; + QCustom3DLabel customLabel; + QCustom3DVolume customVolume; + QWidget *widget = new QWidget; QHBoxLayout *hLayout = new QHBoxLayout(widget); QVBoxLayout *vLayout = new QVBoxLayout(); @@ -60,8 +57,7 @@ int main(int argc, char **argv) // For testing custom surface format QSurfaceFormat surfaceFormat; surfaceFormat.setDepthBufferSize(24); - if (!isOpenGLES()) - surfaceFormat.setSamples(8); + surfaceFormat.setSamples(8); Q3DBars *widgetchart = new Q3DBars(&surfaceFormat); QSize screenSize = widgetchart->screen()->size(); diff --git a/tests/qmlperf/datagenerator.cpp b/tests/qmlperf/datagenerator.cpp new file mode 100644 index 00000000..4819f59d --- /dev/null +++ b/tests/qmlperf/datagenerator.cpp @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "datagenerator.h" +#include <QDebug> + +using namespace QtDataVisualization; + +Q_DECLARE_METATYPE(QScatter3DSeries *) + +DataGenerator::DataGenerator(QObject *parent) : + QObject(parent) +{ + qRegisterMetaType<QScatter3DSeries *>(); +} + +DataGenerator::~DataGenerator() +{ + qDebug() << __FUNCTION__; +} + +void DataGenerator::generateData(QScatter3DSeries *series, uint count) +{ + QScatterDataArray *dataArray = new QScatterDataArray; + dataArray->resize(count); + QScatterDataItem *ptrToDataArray = &dataArray->first(); + + float rand_max = float(RAND_MAX); + for (uint i = 0; i < count; i++) { + ptrToDataArray->setPosition(QVector3D(float(qrand()) / rand_max, + float(qrand()) / rand_max, + float(qrand()) / rand_max)); + ptrToDataArray++; + } + + series->dataProxy()->resetArray(dataArray); +} + +void DataGenerator::add(QScatter3DSeries *series, uint count) +{ + QScatterDataArray appendArray; + appendArray.resize(count); + + float rand_max = float(RAND_MAX); + for (uint i = 0; i < count; i++) { + appendArray[i].setPosition(QVector3D(float(qrand()) / rand_max, + float(qrand()) / rand_max, + float(qrand()) / rand_max)); + } + + series->dataProxy()->addItems(appendArray); +} diff --git a/tests/qmlperf/qml/qmlperf/script.js b/tests/qmlperf/datagenerator.h index dc271e8d..0687ecec 100644 --- a/tests/qmlperf/qml/qmlperf/script.js +++ b/tests/qmlperf/datagenerator.h @@ -16,18 +16,26 @@ ** ****************************************************************************/ -//function createData(base) { -// for (var z = 0; z < 30; z++) { -// for (var x = 0; x < 30; x++) { -// var angle = (((z - 16) * (x - 16)) / 144.0) * 1.57; -// var y = Math.sin(angle + base); -// dataModel.append({"z": z, "x": x, "y": y}); -// } -// } -//} +#ifndef DATAGENERATOR_H +#define DATAGENERATOR_H -function createData(base) { - for (var i = 0; i < base; i++) { - dataModel.append({"z": Math.random(), "x": Math.random(), "y": Math.random()}); - } -} +#include <QtDataVisualization/QScatter3DSeries> + +using namespace QtDataVisualization; + +class DataGenerator : public QObject +{ + Q_OBJECT +public: + DataGenerator(QObject *parent = 0); + virtual ~DataGenerator(); + +public slots: + void generateData(QScatter3DSeries *series, uint count); + void add(QScatter3DSeries *series, uint count); + +private: + QScatter3DSeries m_series; +}; + +#endif // DATAGENERATOR_H diff --git a/tests/qmlperf/main.cpp b/tests/qmlperf/main.cpp index 7d35b2ed..06b18816 100644 --- a/tests/qmlperf/main.cpp +++ b/tests/qmlperf/main.cpp @@ -16,8 +16,11 @@ ** ****************************************************************************/ +#include "datagenerator.h" + #include <QtGui/QGuiApplication> #include <QtCore/QDir> +#include <QtQml/QQmlContext> #include <QtQuick/QQuickView> #include <QtQml/QQmlEngine> @@ -38,6 +41,9 @@ int main(int argc, char *argv[]) QString::fromLatin1("qml"))); QObject::connect(viewer.engine(), &QQmlEngine::quit, &viewer, &QWindow::close); + DataGenerator dataGenerator; + viewer.rootContext()->setContextProperty("dataGenerator", &dataGenerator); + viewer.setTitle(QStringLiteral("QML Performance")); viewer.setSource(QUrl("qrc:/qml/qmlperf/main.qml")); viewer.setResizeMode(QQuickView::SizeRootObjectToView); diff --git a/tests/qmlperf/qml/qmlperf/main.qml b/tests/qmlperf/qml/qmlperf/main.qml index 35f8df5d..bb3f1b82 100644 --- a/tests/qmlperf/qml/qmlperf/main.qml +++ b/tests/qmlperf/qml/qmlperf/main.qml @@ -20,7 +20,6 @@ import QtQuick 2.1 import QtQuick.Layouts 1.0 import QtQuick.Controls 1.0 import QtDataVisualization 1.1 -import "script.js" as Script import "." Rectangle { @@ -29,7 +28,7 @@ Rectangle { height: 1024 property var itemCount: 1000.0 - property var addItems: 1000.0 + property var addItems: 500.0 Button { id: changeButton @@ -90,7 +89,7 @@ Rectangle { text: "Add" onClicked: { itemCount = itemCount + addItems; - Script.createData(addItems); + dataGenerator.add(scatterSeries, addItems); } } @@ -102,11 +101,6 @@ Rectangle { anchors.left: mainview.left state: "meshsphere" - ListModel { - id: dataModel - Component.onCompleted: Script.createData(itemCount) - } - Scatter3D { id: scatterPlot width: graphView.width @@ -134,13 +128,9 @@ Rectangle { Scatter3DSeries { id: scatterSeries mesh: Abstract3DSeries.MeshSphere - ItemModelScatterDataProxy { - itemModel: dataModel - xPosRole: "x" - yPosRole: "y" - zPosRole: "z" - } } + + Component.onCompleted: dataGenerator.generateData(scatterSeries, itemCount); } states: [ diff --git a/tests/qmlperf/qmlperf.pro b/tests/qmlperf/qmlperf.pro index 6560f55c..e29ef75d 100644 --- a/tests/qmlperf/qmlperf.pro +++ b/tests/qmlperf/qmlperf.pro @@ -3,10 +3,14 @@ } # The .cpp file which was generated for your project. Feel free to hack it. -SOURCES += main.cpp +SOURCES += main.cpp \ + datagenerator.cpp RESOURCES += qmlperf.qrc OTHER_FILES += doc/src/* \ doc/images/* \ qml/qmlperf/* + +HEADERS += \ + datagenerator.h diff --git a/tests/qmlperf/qmlperf.qrc b/tests/qmlperf/qmlperf.qrc index e50815c5..b52f4bb9 100644 --- a/tests/qmlperf/qmlperf.qrc +++ b/tests/qmlperf/qmlperf.qrc @@ -1,6 +1,5 @@ <RCC> <qresource prefix="/"> <file>qml/qmlperf/main.qml</file> - <file>qml/qmlperf/script.js</file> </qresource> </RCC> |