From 9549c09d4cfee485c31f54360a32d100d06a2095 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 2 Dec 2013 12:59:46 +0200 Subject: Move series specific visual elements to series, part 2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Surface series grid visibility and smoothness Task-number: QTRD-2557 Change-Id: I0beecb7785bf2fb489d0faba797a145151513a79 Reviewed-by: Tomi Korpipää --- src/datavisualization/engine/surface3drenderer.cpp | 41 +++++++++++++++------- 1 file changed, 28 insertions(+), 13 deletions(-) (limited to 'src/datavisualization/engine/surface3drenderer.cpp') diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp index 5b9aa9d8..bb74e084 100644 --- a/src/datavisualization/engine/surface3drenderer.cpp +++ b/src/datavisualization/engine/surface3drenderer.cpp @@ -99,7 +99,7 @@ Surface3DRenderer::Surface3DRenderer(Surface3DController *controller) m_selectionTexture(0), m_selectionResultTexture(0), m_shadowQualityToShader(33.3f), - m_cachedSmoothSurface(true), + m_cachedFlatShading(false), m_flatSupported(true), m_cachedSurfaceVisible(true), m_cachedSurfaceGridOn(true), @@ -120,7 +120,9 @@ Surface3DRenderer::Surface3DRenderer(Surface3DController *controller) QStringLiteral(":/shaders/fragmentSurfaceFlat")); if (!tester.testCompile()) { m_flatSupported = false; - emit requestSmoothSurface(true); + connect(this, &Surface3DRenderer::flatShadingSupportedChanged, + controller, &Surface3DController::handleFlatShadingSupportedChange); + emit flatShadingSupportedChanged(m_flatSupported); qWarning() << "Warning: Flat qualifier not supported on your platform's GLSL language." " Requires at least GLSL version 1.2 with GL_EXT_gpu_shader4 extension."; } @@ -244,7 +246,7 @@ void Surface3DRenderer::updateData() loadSurfaceObj(); // Note: Data setup can change sample space (as min width/height is 1) - if (m_cachedSmoothSurface) { + if (!m_cachedFlatShading) { m_surfaceObj->setUpSmoothData(m_dataArray, m_sampleSpace, m_heightNormalizer, m_axisCacheY.min(), dimensionChanged); } else { @@ -270,6 +272,19 @@ void Surface3DRenderer::updateData() updateSelectedPoint(m_selectedPoint, m_selectedSeries); } +void Surface3DRenderer::updateSeries(const QList &seriesList, bool updateVisibility) +{ + Abstract3DRenderer::updateSeries(seriesList, updateVisibility); + + // TODO: move to render cache when multiseries support implemented QTRD-2657 + // TODO: until then just update them always. + if (m_visibleSeriesList.size()) { + QSurface3DSeries *series = static_cast(m_visibleSeriesList.at(0).series()); + updateFlatStatus(series->isFlatShadingEnabled()); + updateSurfaceGridStatus(series->isSurfaceGridEnabled()); + } +} + void Surface3DRenderer::updateRows(int startIndex, int count) { // TODO: Properly support non-straight rows and columns (QTRD-2643) @@ -300,7 +315,7 @@ void Surface3DRenderer::updateRows(int startIndex, int count) (*(m_dataArray.at(i)))[j] = array->at(i + m_sampleSpace.y())->at(j + m_sampleSpace.x()); } - if (m_cachedSmoothSurface) { + if (!m_cachedFlatShading) { m_surfaceObj->updateSmoothRows(m_dataArray, startIndex, endRow, m_heightNormalizer, m_axisCacheY.min()); } else { @@ -355,7 +370,7 @@ void Surface3DRenderer::updateSliceDataModel(const QPoint &point) if (!m_sliceSurfaceObj) loadSliceSurfaceObj(); - if (m_cachedSmoothSurface) { + if (!m_cachedFlatShading) { m_sliceSurfaceObj->setUpSmoothData(m_sliceDataArray, sliceRect, m_heightNormalizer, m_axisCacheY.min(), true); } else { @@ -1781,24 +1796,24 @@ void Surface3DRenderer::calculateSceneScalingFactors() #endif } -bool Surface3DRenderer::updateSmoothStatus(bool enable) +bool Surface3DRenderer::updateFlatStatus(bool enable) { - if (!enable && !m_flatSupported) { + if (enable && !m_flatSupported) { qWarning() << "Warning: Flat qualifier not supported on your platform's GLSL language." " Requires at least GLSL version 1.2 with GL_EXT_gpu_shader4 extension."; - enable = true; + enable = false; } bool changed = false; - if (enable != m_cachedSmoothSurface) { - m_cachedSmoothSurface = enable; + if (enable != m_cachedFlatShading) { + m_cachedFlatShading = enable; changed = true; initSurfaceShaders(); } // If no surface object created yet, don't try to update the object if (m_surfaceObj && changed && m_sampleSpace.width() >= 2 && m_sampleSpace.height() >= 2) { - if (m_cachedSmoothSurface) { + if (!m_cachedFlatShading) { m_surfaceObj->setUpSmoothData(m_dataArray, m_sampleSpace, m_heightNormalizer, m_axisCacheY.min(), true); } else { @@ -1807,7 +1822,7 @@ bool Surface3DRenderer::updateSmoothStatus(bool enable) } } - return m_cachedSmoothSurface; + return m_cachedFlatShading; } void Surface3DRenderer::updateSelectedPoint(const QPoint &position, const QSurface3DSeries *series) @@ -2050,7 +2065,7 @@ void Surface3DRenderer::initShaders(const QString &vertexShader, const QString & if (m_surfaceShader) delete m_surfaceShader; #if !defined(QT_OPENGL_ES_2) - if (m_cachedSmoothSurface) { + if (!m_cachedFlatShading) { if (m_cachedShadowQuality > QDataVis::ShadowQualityNone) { m_surfaceShader = new ShaderHelper(this, QStringLiteral(":/shaders/vertexShadow"), QStringLiteral(":/shaders/fragmentSurfaceShadowNoTex")); -- cgit v1.2.3