diff options
-rw-r--r-- | src/datavisualization/engine/bars3drenderer.cpp | 33 | ||||
-rw-r--r-- | src/datavisualization/engine/bars3drenderer_p.h | 1 | ||||
-rw-r--r-- | src/datavisualization/engine/surface3drenderer.cpp | 80 | ||||
-rw-r--r-- | src/datavisualization/engine/surface3drenderer_p.h | 1 |
4 files changed, 58 insertions, 57 deletions
diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp index cbe0446c..7863cda3 100644 --- a/src/datavisualization/engine/bars3drenderer.cpp +++ b/src/datavisualization/engine/bars3drenderer.cpp @@ -1491,18 +1491,7 @@ void Bars3DRenderer::handleResize() if (m_cachedBoundingRect.width() == 0 || m_cachedBoundingRect.height() == 0) return; - // Set view port - if (m_cachedIsSlicingActivated) { - m_mainViewPort = QRect(0, - m_cachedBoundingRect.height() - - (m_cachedBoundingRect.height() / smallerVPSize), - m_cachedBoundingRect.width() / smallerVPSize, - m_cachedBoundingRect.height() / smallerVPSize); - m_sliceViewPort = QRect(0, 0, m_cachedBoundingRect.width(), m_cachedBoundingRect.height()); - } else { - m_mainViewPort = QRect(0, 0, m_cachedBoundingRect.width(), m_cachedBoundingRect.height()); - m_sliceViewPort = QRect(0, 0, 0, 0); - } + setViewPorts(); Abstract3DRenderer::handleResize(); } @@ -1740,7 +1729,21 @@ void Bars3DRenderer::updateSlicingActive(bool isSlicing) return; m_cachedIsSlicingActivated = isSlicing; - if (isSlicing) { + + setViewPorts(); + + if (!m_cachedIsSlicingActivated) + initSelectionBuffer(); // We need to re-init selection buffer in case there has been a resize + +#if !defined(QT_OPENGL_ES_2) + updateDepthBuffer(); // Re-init depth buffer as well +#endif +} + +void Bars3DRenderer::setViewPorts() +{ + // Update view ports + if (m_cachedIsSlicingActivated) { m_mainViewPort = QRect(0, m_cachedBoundingRect.height() - (m_cachedBoundingRect.height() / smallerVPSize), @@ -1750,11 +1753,7 @@ void Bars3DRenderer::updateSlicingActive(bool isSlicing) } else { m_mainViewPort = QRect(0, 0, m_cachedBoundingRect.width(), m_cachedBoundingRect.height()); m_sliceViewPort = QRect(0, 0, 0, 0); - initSelectionBuffer(); // We need to re-init selection buffer in case there has been a resize } -#if !defined(QT_OPENGL_ES_2) - updateDepthBuffer(); // Re-init depth buffer as well -#endif } QRect Bars3DRenderer::mainViewPort() diff --git a/src/datavisualization/engine/bars3drenderer_p.h b/src/datavisualization/engine/bars3drenderer_p.h index 9b612474..764942cc 100644 --- a/src/datavisualization/engine/bars3drenderer_p.h +++ b/src/datavisualization/engine/bars3drenderer_p.h @@ -144,6 +144,7 @@ private: void drawScene(GLuint defaultFboHandle); void handleResize(); + void setViewPorts(); void loadBackgroundMesh(); void loadGridLineMesh(); void loadLabelMesh(); diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp index a1dfc7e8..7aec3ff4 100644 --- a/src/datavisualization/engine/surface3drenderer.cpp +++ b/src/datavisualization/engine/surface3drenderer.cpp @@ -534,7 +534,8 @@ void Surface3DRenderer::drawSlicedScene() surfaceShader->setUniformValue(surfaceShader->lightP(), lightPos); surfaceShader->setUniformValue(surfaceShader->view(), viewMatrix); surfaceShader->setUniformValue(surfaceShader->model(), modelMatrix); - surfaceShader->setUniformValue(surfaceShader->nModel(), itModelMatrix.inverted().transposed()); + surfaceShader->setUniformValue(surfaceShader->nModel(), + itModelMatrix.inverted().transposed()); surfaceShader->setUniformValue(surfaceShader->MVP(), MVPMatrix); surfaceShader->setUniformValue(surfaceShader->color(), color); surfaceShader->setUniformValue(surfaceShader->lightS(), 0.25f); @@ -571,17 +572,17 @@ void Surface3DRenderer::drawSlicedScene() // Bind line shader lineShader->bind(); + // Set unchanging shader bindings + QVector3D lineColor = Utils::vectorFromColor(m_cachedTheme.m_gridLine); + lineShader->setUniformValue(lineShader->lightP(), lightPos); + lineShader->setUniformValue(lineShader->view(), viewMatrix); + lineShader->setUniformValue(lineShader->color(), lineColor); + lineShader->setUniformValue(lineShader->ambientS(), m_cachedTheme.m_ambientStrength * 2.0f); + lineShader->setUniformValue(lineShader->lightS(), 0.25f); + if (m_axisCacheY.segmentCount() > 0) { QVector3D gridLineScaleX(scaleXBackground, gridLineWidth, gridLineWidth); - // Set unchanging shader bindings - QVector3D lineColor = Utils::vectorFromColor(m_cachedTheme.m_gridLine); - lineShader->setUniformValue(lineShader->lightP(), lightPos); - lineShader->setUniformValue(lineShader->view(), viewMatrix); - lineShader->setUniformValue(lineShader->color(), lineColor); - lineShader->setUniformValue(lineShader->ambientS(), m_cachedTheme.m_ambientStrength * 2.0f); - lineShader->setUniformValue(lineShader->lightS(), 0.25f); - // Back wall GLfloat lineStep = 2.0f * m_axisCacheY.subSegmentStep() / m_heightNormalizer; GLfloat linePos = -1.0f; @@ -831,7 +832,7 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle) m_depthShader->bind(); // Set viewport for depth map rendering. Must match texture size. Larger values give smoother shadows. - glViewport(m_mainViewPort.x(), m_mainViewPort.y(), + glViewport(0, 0, m_mainViewPort.width() * m_shadowQualityMultiplier, m_mainViewPort.height() * m_shadowQualityMultiplier); @@ -1877,23 +1878,7 @@ void Surface3DRenderer::handleResize() if (m_cachedBoundingRect.width() == 0 || m_cachedBoundingRect.height() == 0) return; - // Set view port - if (m_cachedIsSlicingActivated) { - m_mainViewPort = QRect(0, - m_cachedBoundingRect.height() - m_cachedBoundingRect.height() / subViewDivider, - m_cachedBoundingRect.width() / subViewDivider, - m_cachedBoundingRect.height() / subViewDivider); - } else { - m_mainViewPort = QRect(0, 0, m_cachedBoundingRect.width(), m_cachedBoundingRect.height()); - } - m_sliceViewPort = QRect(0, 0, m_cachedBoundingRect.width(), m_cachedBoundingRect.height()); - - if (m_selectionPointer) { - if (m_cachedIsSlicingActivated) - m_selectionPointer->updateBoundingRect(m_sliceViewPort); - else - m_selectionPointer->updateBoundingRect(m_mainViewPort); - } + setViewPorts(); Abstract3DRenderer::handleResize(); } @@ -1983,7 +1968,8 @@ QString Surface3DRenderer::createSelectionLabel(qreal value, int column, int row void Surface3DRenderer::loadMeshFile() { - qDebug() << __FUNCTION__ << "should we do something"; + // Do nothing, not yet supported by this renderer + // TODO: To be used for overriding the selection ball mesh after technology preview } void Surface3DRenderer::updateShadowQuality(QDataVis::ShadowQuality quality) @@ -2028,24 +2014,38 @@ void Surface3DRenderer::updateShadowQuality(QDataVis::ShadowQuality quality) void Surface3DRenderer::updateSlicingActive(bool isSlicing) { - if (isSlicing == m_cachedIsSlicingActivated) + if (m_cachedIsSlicingActivated == isSlicing) return; m_cachedIsSlicingActivated = isSlicing; - if (isSlicing) { - m_mainViewPort = QRect(0, m_cachedBoundingRect.height() - m_cachedBoundingRect.height() / subViewDivider, - m_cachedBoundingRect.width() / subViewDivider, m_cachedBoundingRect.height() / subViewDivider); - if (m_depthTexture) { - m_textureHelper->deleteTexture(&m_depthTexture); - m_depthTexture = 0; - } - } else { - m_mainViewPort = QRect(0, 0, this->m_cachedBoundingRect.width(), - this->m_cachedBoundingRect.height()); + + setViewPorts(); + + if (!m_cachedIsSlicingActivated) initSelectionBuffer(); // We need to re-init selection buffer in case there has been a resize + #if !defined(QT_OPENGL_ES_2) - updateDepthBuffer(); // Re-init depth buffer as well + updateDepthBuffer(); // Re-init depth buffer as well #endif +} + +void Surface3DRenderer::setViewPorts() +{ + // Update view ports + if (m_cachedIsSlicingActivated) { + m_mainViewPort = QRect(0, + m_cachedBoundingRect.height() + - (m_cachedBoundingRect.height() / subViewDivider), + m_cachedBoundingRect.width() / subViewDivider, + m_cachedBoundingRect.height() / subViewDivider); + m_sliceViewPort = QRect(0, 0, m_cachedBoundingRect.width(), m_cachedBoundingRect.height()); + if (m_selectionPointer) + m_selectionPointer->updateBoundingRect(m_sliceViewPort); + } else { + m_mainViewPort = QRect(0, 0, m_cachedBoundingRect.width(), m_cachedBoundingRect.height()); + m_sliceViewPort = QRect(0, 0, 0, 0); + if (m_selectionPointer) + m_selectionPointer->updateBoundingRect(m_mainViewPort); } } diff --git a/src/datavisualization/engine/surface3drenderer_p.h b/src/datavisualization/engine/surface3drenderer_p.h index e42e820a..c805e508 100644 --- a/src/datavisualization/engine/surface3drenderer_p.h +++ b/src/datavisualization/engine/surface3drenderer_p.h @@ -149,6 +149,7 @@ public slots: void updateSelectionMode(QDataVis::SelectionMode mode); private: + void setViewPorts(); void updateSliceDataModel(int selectionId); virtual void updateShadowQuality(QDataVis::ShadowQuality quality); virtual void updateTextures(); |