diff options
author | Mika Salmela <mika.salmela@digia.com> | 2013-12-20 12:03:59 +0200 |
---|---|---|
committer | Mika Salmela <mika.salmela@digia.com> | 2013-12-20 12:05:37 +0200 |
commit | eb3d0514ca886db33776522ea00f27b69bc86ad1 (patch) | |
tree | 3439287f6a70f681c5c9a08c77ec1b4342a24768 /src/datavisualization | |
parent | 07aba602fc82ac31684988f8e8e22521d2b3c982 (diff) | |
parent | e895c5085f6097983bdd617c39ea5184541d6c4d (diff) |
Merge branch 'develop'
Change-Id: I7408ac3b14c3a9484d28f8c08eece6210a44025e
Diffstat (limited to 'src/datavisualization')
10 files changed, 167 insertions, 96 deletions
diff --git a/src/datavisualization/doc/snippets/doc_src_qmldatavisualization.cpp b/src/datavisualization/doc/snippets/doc_src_qmldatavisualization.cpp index 03f6e847..623f7f6f 100644 --- a/src/datavisualization/doc/snippets/doc_src_qmldatavisualization.cpp +++ b/src/datavisualization/doc/snippets/doc_src_qmldatavisualization.cpp @@ -21,86 +21,124 @@ import QtDataVisualization 1.0 //! [0] //! [1] -Bars3D { - rows: 4 - columns: 4 - barSpacing: Qt.size(0.5, 0.5) - barSpacingRelative: false - - Bar3DSeries { - itemLabelFormat: "@valueTitle for @colLabel, @rowLabel: @valueLabel" - - ItemModelBarDataProxy { - itemModel: model // E.g. a list model defined elsewhere containing monthly expenses data. - // Mapping model roles to bar series rows, columns, and values. - rowRole: "year" - columnRole: "city" - valueRole: "expenses" - rowCategories: ["2010", "2011", "2012", "2013"] - columnCategories: ["Oulu", "Rauma", "Helsinki", "Tampere"] +import QtQuick 2.0 +import QtDataVisualization 1.0 + +Item { + width: 640 + height: 480 + + Bars3D { + width: parent.width + height: parent.height + + Bar3DSeries { + itemLabelFormat: "@colLabel, @rowLabel: @valueLabel" + + ItemModelBarDataProxy { + itemModel: dataModel + // Mapping model roles to bar series rows, columns, and values. + rowRole: "year" + columnRole: "city" + valueRole: "expenses" + } } } + + ListModel { + id: dataModel + ListElement{ year: "2012"; city: "Oulu"; expenses: "4200"; } + ListElement{ year: "2012"; city: "Rauma"; expenses: "2100"; } + ListElement{ year: "2012"; city: "Helsinki"; expenses: "7040"; } + ListElement{ year: "2012"; city: "Tampere"; expenses: "4330"; } + ListElement{ year: "2013"; city: "Oulu"; expenses: "3960"; } + ListElement{ year: "2013"; city: "Rauma"; expenses: "1990"; } + ListElement{ year: "2013"; city: "Helsinki"; expenses: "7230"; } + ListElement{ year: "2013"; city: "Tampere"; expenses: "4650"; } + } } //! [1] //! [2] -Scatter3D { - axisX.segmentCount: 2 - axisX.subSegmentCount: 2 - axisX.labelFormat: "%.2f" - axisZ.segmentCount: 2 - axisZ.subSegmentCount: 2 - axisZ.labelFormat: "%.2f" - axisY.segmentCount: 3 - axisY.subSegmentCount: 2 - axisY.labelFormat: "%.2f" - - Scatter3DSeries { - itemLabelFormat: "X:@xLabel Y:@yLabel Z:@zLabel" - - ItemModelScatterDataProxy { - itemModel: model // E.g. a list model defined elsewhere containing point coordinates. - // Mapping model roles to scatter series item coordinates. - xPosRole: "xPos" - yPosRole: "yPos" - zPosRole: "zPos" +import QtQuick 2.0 +import QtDataVisualization 1.0 + +Item { + width: 640 + height: 480 + + Scatter3D { + width: parent.width + height: parent.height + Scatter3DSeries { + ItemModelScatterDataProxy { + itemModel: dataModel + // Mapping model roles to scatter series item coordinates. + xPosRole: "xPos" + yPosRole: "yPos" + zPosRole: "zPos" + } } } + + ListModel { + id: dataModel + ListElement{ xPos: "2.754"; yPos: "1.455"; zPos: "3.362"; } + ListElement{ xPos: "3.164"; yPos: "2.022"; zPos: "4.348"; } + ListElement{ xPos: "4.564"; yPos: "1.865"; zPos: "1.346"; } + ListElement{ xPos: "1.068"; yPos: "1.224"; zPos: "2.983"; } + ListElement{ xPos: "2.323"; yPos: "2.502"; zPos: "3.133"; } + } } //! [2] //! [3] -Surface3D { - axisX.min: 0.0 - axisX.max: 10.0 - axisZ.min: 0.0 - axisZ.max: 10.0 - axisY.min: 0.0 - axisY.max: 5.0 - axisX.segmentCount: 5 - axisX.subSegmentCount: 2 - axisX.labelFormat: "%i" - axisZ.segmentCount: 5 - axisZ.subSegmentCount: 2 - axisZ.labelFormat: "%i" - axisY.segmentCount: 5 - axisY.labelFormat: "%.1f" - - Surface3DSeries { - ItemModelSurfaceDataProxy { - itemModel: model // E.g. a list model defined elsewhere containing population data. - // Mapping model roles to surface series rows, columns, and values. - rowRole: "longitude" - columnRole: "latitude" - valueRole: "pop_density" +import QtQuick 2.0 +import QtDataVisualization 1.0 + +Item { + width: 640 + height: 480 + + Surface3D { + width: parent.width + height: parent.height + Surface3DSeries { + itemLabelFormat: "Pop density at (@xLabel N, @zLabel E): @yLabel" + ItemModelSurfaceDataProxy { + itemModel: dataModel + // Mapping model roles to surface series rows, columns, and values. + rowRole: "longitude" + columnRole: "latitude" + valueRole: "pop_density" + } } } + ListModel { + id: dataModel + ListElement{ longitude: "20"; latitude: "10"; pop_density: "4.75"; } + ListElement{ longitude: "21"; latitude: "10"; pop_density: "3.00"; } + ListElement{ longitude: "22"; latitude: "10"; pop_density: "1.24"; } + ListElement{ longitude: "23"; latitude: "10"; pop_density: "2.53"; } + ListElement{ longitude: "20"; latitude: "11"; pop_density: "2.55"; } + ListElement{ longitude: "21"; latitude: "11"; pop_density: "2.03"; } + ListElement{ longitude: "22"; latitude: "11"; pop_density: "3.46"; } + ListElement{ longitude: "23"; latitude: "11"; pop_density: "5.12"; } + ListElement{ longitude: "20"; latitude: "12"; pop_density: "1.37"; } + ListElement{ longitude: "21"; latitude: "12"; pop_density: "2.98"; } + ListElement{ longitude: "22"; latitude: "12"; pop_density: "3.33"; } + ListElement{ longitude: "23"; latitude: "12"; pop_density: "3.23"; } + ListElement{ longitude: "20"; latitude: "13"; pop_density: "4.34"; } + ListElement{ longitude: "21"; latitude: "13"; pop_density: "3.54"; } + ListElement{ longitude: "22"; latitude: "13"; pop_density: "1.65"; } + ListElement{ longitude: "23"; latitude: "13"; pop_density: "2.67"; } + } } //! [3] //! [7] ItemModelBarDataProxy { - itemModel: model // E.g. a list model defined elsewhere containing monthly expenses data. + itemModel: model // E.g. a list model defined elsewhere containing yearly expenses data. // Mapping model roles to bar series rows, columns, and values. rowRole: "year" columnRole: "city" diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc index fc1b732c..edeb5530 100644 --- a/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc +++ b/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc @@ -36,6 +36,11 @@ * * See \l{Qt Quick 2 Bars Example} for more thorough usage example. * + * \note Qt Data Visualization graphs are rendered behind any other QML elements on screen, including + * the parent elements of the graph. To make the whole graph show, ensure that no other element + * draws anything over the area the graph occupies. For example, having a non-transparent \c Rectangle + * item as the parent of a graph causes the graph to be hidden. + * * \sa Bar3DSeries, ItemModelBarDataProxy, Scatter3D, Surface3D, {Qt Data Visualization C++ Classes} */ @@ -83,6 +88,7 @@ /*! * \qmlproperty list<QBar3DSeries> Bars3D::seriesList + * \default * This property holds the series of the graph. * By default, this property contains an empty list. * To set the series, either use the addSeries() function or define them as children of the graph. diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-scatter3d.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-scatter3d.qdoc index 1f04424f..0a8e1674 100644 --- a/src/datavisualization/doc/src/qtdatavisualization-qml-scatter3d.qdoc +++ b/src/datavisualization/doc/src/qtdatavisualization-qml-scatter3d.qdoc @@ -36,6 +36,11 @@ See \l{Qt Quick 2 Scatter Example} for more thorough usage example. + \note Qt Data Visualization graphs are rendered behind any other QML elements on screen, including + the parent elements of the graph. To make the whole graph show, ensure that no other element + draws anything over the area the graph occupies. For example, having a non-transparent \c Rectangle + item as the parent of a graph causes the graph to be hidden. + \sa Scatter3DSeries, ScatterDataProxy, Bars3D, Surface3D, {Qt Data Visualization C++ Classes} */ @@ -68,6 +73,7 @@ /*! * \qmlproperty list<QScatter3DSeries> Scatter3D::seriesList + * \default * This property holds the series of the graph. * By default, this property contains an empty list. * To set the series, either use the addSeries() function or define them as children of the graph. diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc index a3886008..b28d30a7 100644 --- a/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc +++ b/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc @@ -36,6 +36,11 @@ See \l{Qt Quick 2 Surface Example} for more thorough usage example. + \note Qt Data Visualization graphs are rendered behind any other QML elements on screen, including + the parent elements of the graph. To make the whole graph show, ensure that no other element + draws anything over the area the graph occupies. For example, having a non-transparent \c Rectangle + item as the parent of a graph causes the graph to be hidden. + \sa Surface3DSeries, ItemModelSurfaceDataProxy, Bars3D, Scatter3D, {Qt Data Visualization C++ Classes} */ @@ -74,6 +79,7 @@ /*! * \qmlproperty list<QSurface3DSeries> Surface3D::seriesList + * \default * This property holds the series of the graph. * By default, this property contains an empty list. * To set the series, either use the addSeries() function or define them as children of the graph. diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp index ecdac21f..f13b6e79 100644 --- a/src/datavisualization/engine/bars3drenderer.cpp +++ b/src/datavisualization/engine/bars3drenderer.cpp @@ -99,11 +99,13 @@ Bars3DRenderer::Bars3DRenderer(Bars3DController *controller) Bars3DRenderer::~Bars3DRenderer() { - m_textureHelper->glDeleteFramebuffers(1, &m_selectionFrameBuffer); - m_textureHelper->glDeleteRenderbuffers(1, &m_selectionDepthBuffer); - m_textureHelper->deleteTexture(&m_selectionTexture); - m_textureHelper->glDeleteFramebuffers(1, &m_depthFrameBuffer); - m_textureHelper->deleteTexture(&m_bgrTexture); + if (QOpenGLContext::currentContext()) { + m_textureHelper->glDeleteFramebuffers(1, &m_selectionFrameBuffer); + m_textureHelper->glDeleteRenderbuffers(1, &m_selectionDepthBuffer); + m_textureHelper->deleteTexture(&m_selectionTexture); + m_textureHelper->glDeleteFramebuffers(1, &m_depthFrameBuffer); + m_textureHelper->deleteTexture(&m_bgrTexture); + } delete m_barShader; delete m_barGradientShader; diff --git a/src/datavisualization/engine/drawer.cpp b/src/datavisualization/engine/drawer.cpp index 14f0b315..f78b2d29 100644 --- a/src/datavisualization/engine/drawer.cpp +++ b/src/datavisualization/engine/drawer.cpp @@ -56,7 +56,8 @@ Drawer::Drawer(Q3DTheme *theme) Drawer::~Drawer() { delete m_textureHelper; - glDeleteBuffers(1, &m_pointbuffer); + if (QOpenGLContext::currentContext()) + glDeleteBuffers(1, &m_pointbuffer); } void Drawer::initializeOpenGL() diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp index 00452cf7..ee5c119e 100644 --- a/src/datavisualization/engine/scatter3drenderer.cpp +++ b/src/datavisualization/engine/scatter3drenderer.cpp @@ -98,11 +98,13 @@ Scatter3DRenderer::Scatter3DRenderer(Scatter3DController *controller) Scatter3DRenderer::~Scatter3DRenderer() { - m_textureHelper->glDeleteFramebuffers(1, &m_selectionFrameBuffer); - m_textureHelper->glDeleteRenderbuffers(1, &m_selectionDepthBuffer); - m_textureHelper->deleteTexture(&m_selectionTexture); - m_textureHelper->glDeleteFramebuffers(1, &m_depthFrameBuffer); - m_textureHelper->deleteTexture(&m_bgrTexture); + if (QOpenGLContext::currentContext()) { + m_textureHelper->glDeleteFramebuffers(1, &m_selectionFrameBuffer); + m_textureHelper->glDeleteRenderbuffers(1, &m_selectionDepthBuffer); + m_textureHelper->deleteTexture(&m_selectionTexture); + m_textureHelper->glDeleteFramebuffers(1, &m_depthFrameBuffer); + m_textureHelper->deleteTexture(&m_bgrTexture); + } delete m_dotShader; delete m_dotGradientShader; delete m_depthShader; diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp index 7049632d..912edd97 100644 --- a/src/datavisualization/engine/surface3drenderer.cpp +++ b/src/datavisualization/engine/surface3drenderer.cpp @@ -134,16 +134,17 @@ Surface3DRenderer::Surface3DRenderer(Surface3DController *controller) Surface3DRenderer::~Surface3DRenderer() { - m_textureHelper->glDeleteFramebuffers(1, &m_depthFrameBuffer); - m_textureHelper->glDeleteRenderbuffers(1, &m_selectionDepthBuffer); - m_textureHelper->glDeleteFramebuffers(1, &m_selectionFrameBuffer); - - m_textureHelper->deleteTexture(&m_depthTexture); - m_textureHelper->deleteTexture(&m_depthModelTexture); - m_textureHelper->deleteTexture(&m_selectionTexture); - m_textureHelper->deleteTexture(&m_selectionResultTexture); - m_textureHelper->deleteTexture(&m_uniformGradientTexture); + if (QOpenGLContext::currentContext()) { + m_textureHelper->glDeleteFramebuffers(1, &m_depthFrameBuffer); + m_textureHelper->glDeleteRenderbuffers(1, &m_selectionDepthBuffer); + m_textureHelper->glDeleteFramebuffers(1, &m_selectionFrameBuffer); + m_textureHelper->deleteTexture(&m_depthTexture); + m_textureHelper->deleteTexture(&m_depthModelTexture); + m_textureHelper->deleteTexture(&m_selectionTexture); + m_textureHelper->deleteTexture(&m_selectionResultTexture); + m_textureHelper->deleteTexture(&m_uniformGradientTexture); + } delete m_shader; delete m_depthShader; delete m_backgroundShader; @@ -264,6 +265,10 @@ void Surface3DRenderer::updateData() delete m_surfaceObj; m_surfaceObj = 0; +#if !defined(QT_OPENGL_ES_2) + m_textureHelper->fillDepthTexture(m_depthTexture, m_primarySubViewport.size(), + m_shadowQualityMultiplier, 1.0f); +#endif } for (int i = 0; i < m_sliceDataArray.size(); i++) @@ -285,6 +290,12 @@ void Surface3DRenderer::updateSeries(const QList<QAbstract3DSeries *> &seriesLis QSurface3DSeries::DrawFlags drawMode = series->drawMode(); m_cachedSurfaceVisible = drawMode.testFlag(QSurface3DSeries::DrawSurface); +#if !defined(QT_OPENGL_ES_2) + if (!m_cachedSurfaceVisible) { + m_textureHelper->fillDepthTexture(m_depthTexture, m_primarySubViewport.size(), + m_shadowQualityMultiplier, 1.0f); + } +#endif m_cachedSurfaceGridOn = drawMode.testFlag(QSurface3DSeries::DrawWireframe); QVector3D seriesColor = Utils::vectorFromColor(series->baseColor()); @@ -304,11 +315,9 @@ void Surface3DRenderer::updateRows(const QVector<int> &rows) const QSurfaceDataArray *array = 0; if (m_visibleSeriesList.size()) { QSurface3DSeries *firstSeries = static_cast<QSurface3DSeries *>(m_visibleSeriesList.at(0).series()); - if (m_cachedSurfaceGridOn || m_cachedSurfaceVisible) { - QSurfaceDataProxy *dataProxy = firstSeries->dataProxy(); - if (dataProxy) - array = dataProxy->array(); - } + QSurfaceDataProxy *dataProxy = firstSeries->dataProxy(); + if (dataProxy) + array = dataProxy->array(); } if (array && array->size() >= 2 && array->at(0)->size() >= 2 && @@ -346,11 +355,9 @@ void Surface3DRenderer::updateItem(const QVector<QPoint> &points) const QSurfaceDataArray *array = 0; if (m_visibleSeriesList.size()) { QSurface3DSeries *firstSeries = static_cast<QSurface3DSeries *>(m_visibleSeriesList.at(0).series()); - if (m_cachedSurfaceGridOn || m_cachedSurfaceVisible) { - QSurfaceDataProxy *dataProxy = firstSeries->dataProxy(); - if (dataProxy) - array = dataProxy->array(); - } + QSurfaceDataProxy *dataProxy = firstSeries->dataProxy(); + if (dataProxy) + array = dataProxy->array(); } if (array && array->size() >= 2 && array->at(0)->size() >= 2 && diff --git a/src/datavisualization/utils/abstractobjecthelper.cpp b/src/datavisualization/utils/abstractobjecthelper.cpp index d47f2fe6..96cdc0c4 100644 --- a/src/datavisualization/utils/abstractobjecthelper.cpp +++ b/src/datavisualization/utils/abstractobjecthelper.cpp @@ -34,10 +34,12 @@ AbstractObjectHelper::AbstractObjectHelper() AbstractObjectHelper::~AbstractObjectHelper() { - glDeleteBuffers(1, &m_vertexbuffer); - glDeleteBuffers(1, &m_uvbuffer); - glDeleteBuffers(1, &m_normalbuffer); - glDeleteBuffers(1, &m_elementbuffer); + if (QOpenGLContext::currentContext()) { + glDeleteBuffers(1, &m_vertexbuffer); + glDeleteBuffers(1, &m_uvbuffer); + glDeleteBuffers(1, &m_normalbuffer); + glDeleteBuffers(1, &m_elementbuffer); + } } GLuint AbstractObjectHelper::vertexBuf() diff --git a/src/datavisualization/utils/surfaceobject.cpp b/src/datavisualization/utils/surfaceobject.cpp index 605376e2..6e4765e5 100644 --- a/src/datavisualization/utils/surfaceobject.cpp +++ b/src/datavisualization/utils/surfaceobject.cpp @@ -39,7 +39,8 @@ SurfaceObject::SurfaceObject() SurfaceObject::~SurfaceObject() { - glDeleteBuffers(1, &m_gridElementbuffer); + if (QOpenGLContext::currentContext()) + glDeleteBuffers(1, &m_gridElementbuffer); } void SurfaceObject::setUpSmoothData(const QSurfaceDataArray &dataArray, const QRect &space, |