diff options
author | Keränen Pasi <pasi.keranen@digia.com> | 2013-08-06 11:48:33 +0300 |
---|---|---|
committer | Pasi Keränen <pasi.keranen@digia.com> | 2013-08-06 12:40:22 +0300 |
commit | 6fdda6d560fafb086501cfc60616d84324bb6cb0 (patch) | |
tree | b5577989ba0b71ba49e4cb8a09c1bba4e9ebd826 /src/datavis3d/engine/bars3drenderer.cpp | |
parent | 6ce8545225700a97e6ba306144698880ca1051ff (diff) |
First set of common functionality moved to renderer base class.
Change-Id: Icbe542b48d820fd6af66ae0611ceff2641139b5f
Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Diffstat (limited to 'src/datavis3d/engine/bars3drenderer.cpp')
-rw-r--r-- | src/datavis3d/engine/bars3drenderer.cpp | 196 |
1 files changed, 36 insertions, 160 deletions
diff --git a/src/datavis3d/engine/bars3drenderer.cpp b/src/datavis3d/engine/bars3drenderer.cpp index 107e4b59..dda2a984 100644 --- a/src/datavis3d/engine/bars3drenderer.cpp +++ b/src/datavis3d/engine/bars3drenderer.cpp @@ -100,7 +100,6 @@ Bars3dRenderer::Bars3dRenderer(Bars3dController *controller) m_backgroundObj(0), m_gridLineObj(0), m_labelObj(0), - m_drawer(new Drawer(m_cachedTheme, m_cachedFont, m_cachedLabelTransparency)), m_bgrTexture(0), m_depthTexture(0), m_selectionTexture(0), @@ -108,7 +107,6 @@ Bars3dRenderer::Bars3dRenderer(Bars3dController *controller) m_selectionFrameBuffer(0), m_selectionDepthBuffer(0), m_shadowQualityToShader(33.3f), - m_autoScaleAdjustment(1.0f), m_heightNormalizer(1.0f), m_yAdjustment(0.0f), m_rowWidth(0), @@ -128,13 +126,38 @@ Bars3dRenderer::Bars3dRenderer(Bars3dController *controller) #endif { m_dummyBarRenderItem.setRenderer(this); + initializePreOpenGL(); + initializeOpenGLFunctions(); + initializeOpenGL(); +} + +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 (m_sliceSelection) { + m_sliceSelection->clear(); // Slice doesn't own its items + delete m_sliceSelection; + } + delete m_barShader; + delete m_depthShader; + delete m_selectionShader; + delete m_backgroundShader; + delete m_barObj; + delete m_backgroundObj; + delete m_gridLineObj; + delete m_textureHelper; + delete m_drawer; +} - // Listen to changes in the drawer - QObject::connect(m_drawer, &Drawer::drawerChanged, this, &Bars3dRenderer::updateTextures); +void Bars3dRenderer::initializePreOpenGL() +{ + Abstract3DRenderer::initializePreOpenGL(); // Listen to changes in the controller - QObject::connect(m_controller, &Bars3dController::themeChanged, this, - &Bars3dRenderer::updateTheme); QObject::connect(m_controller, &Bars3dController::selectionModeChanged, this, &Bars3dRenderer::updateSelectionMode); QObject::connect(m_controller, &Bars3dController::slicingActiveChanged, this, @@ -147,28 +170,17 @@ Bars3dRenderer::Bars3dRenderer(Bars3dController *controller) &Bars3dRenderer::updateBarSpecs); QObject::connect(m_controller, &Bars3dController::objFileChanged, this, &Bars3dRenderer::updateMeshFileName); - QObject::connect(m_controller, &Bars3dController::boundingRectChanged, this, - &Bars3dRenderer::updateBoundingRect); - QObject::connect(m_controller, &Bars3dController::sizeChanged, this, - &Bars3dRenderer::updateBoundingRect); QObject::connect(m_controller, &Bars3dController::positionChanged, this, &Bars3dRenderer::updatePosition); - QObject::connect(m_controller, &Bars3dController::fontChanged, this, - &Bars3dRenderer::updateFont); - QObject::connect(m_controller, &Bars3dController::labelTransparencyUpdated, this, - &Bars3dRenderer::updateLabelTransparency); QObject::connect(m_controller, &Bars3dController::gridEnabledChanged, this, &Bars3dRenderer::updateGridEnabled); QObject::connect(m_controller, &Bars3dController::backgroundEnabledChanged, this, &Bars3dRenderer::updateBackgroundEnabled); - QObject::connect(m_controller, &Bars3dController::shadowQualityChanged, this, - &Bars3dRenderer::updateShadowQuality); QObject::connect(m_controller, &Bars3dController::tickCountChanged, this, &Bars3dRenderer::updateTickCount); QObject::connect(m_controller, &Bars3dController::zoomLevelChanged, this, &Bars3dRenderer::updateZoomLevel); - updateTheme(m_controller->theme()); updateSampleSpace(m_controller->rowCount(), m_controller->columnCount()); updateSelectionMode(m_controller->selectionMode()); updateSlicingActive(m_controller->isSlicingActive()); @@ -177,16 +189,12 @@ Bars3dRenderer::Bars3dRenderer(Bars3dController *controller) updateBarSpecs(m_controller->barThickness(), m_controller->barSpacing(), m_controller->isBarSpecRelative()); updateMeshFileName(m_controller->objFile()); - updateFont(m_controller->font()); - updateLabelTransparency(m_controller->labelTransparency()); updateGridEnabled(m_controller->gridEnabled()); updateBackgroundEnabled(m_controller->backgroundEnabled()); +} - initializeOpenGL(); - - updateBoundingRect(m_controller->boundingRect()); - updateShadowQuality(m_controller->shadowQuality()); - +void Bars3dRenderer::initializeOpenGL() +{ // TODO: Protect with mutex or redesign how axes create label items? if (m_controller->axisX()) m_controller->axisX()->d_ptr->setDrawer(m_drawer); @@ -194,72 +202,12 @@ Bars3dRenderer::Bars3dRenderer(Bars3dController *controller) m_controller->axisY()->d_ptr->setDrawer(m_drawer); if (m_controller->axisZ()) m_controller->axisZ()->d_ptr->setDrawer(m_drawer); -} - -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 (m_sliceSelection) { - m_sliceSelection->clear(); // Slice doesn't own its items - delete m_sliceSelection; - } - delete m_barShader; - delete m_depthShader; - delete m_selectionShader; - delete m_backgroundShader; - delete m_barObj; - delete m_backgroundObj; - delete m_gridLineObj; - delete m_textureHelper; - delete m_drawer; -} - -void Bars3dRenderer::initializeOpenGL() -{ - initializeOpenGLFunctions(); m_textureHelper = new TextureHelper(); m_drawer->initializeOpenGL(); // Initialize shaders -#if !defined(QT_OPENGL_ES_2) - if (m_cachedShadowQuality > ShadowNone) { - if (!m_cachedTheme.m_uniformColor) { - initShaders(QStringLiteral(":/shaders/vertexShadow"), - QStringLiteral(":/shaders/fragmentShadowNoTexColorOnY")); - } else { - initShaders(QStringLiteral(":/shaders/vertexShadow"), - QStringLiteral(":/shaders/fragmentShadowNoTex")); - } - initBackgroundShaders(QStringLiteral(":/shaders/vertexShadow"), - QStringLiteral(":/shaders/fragmentShadowNoTex")); - } else { - if (!m_cachedTheme.m_uniformColor) { - initShaders(QStringLiteral(":/shaders/vertex"), - QStringLiteral(":/shaders/fragmentColorOnY")); - } else { - initShaders(QStringLiteral(":/shaders/vertex"), - QStringLiteral(":/shaders/fragment")); - } - initBackgroundShaders(QStringLiteral(":/shaders/vertex"), - QStringLiteral(":/shaders/fragment")); - } -#else - if (!m_cachedTheme.m_uniformColor) { - initShaders(QStringLiteral(":/shaders/vertexES2"), - QStringLiteral(":/shaders/fragmentColorOnYES2")); - } else { - initShaders(QStringLiteral(":/shaders/vertexES2"), - QStringLiteral(":/shaders/fragmentES2")); - } - initBackgroundShaders(QStringLiteral(":/shaders/vertexES2"), - QStringLiteral(":/shaders/fragmentES2")); -#endif - + handleShadowQualityChange(); initLabelShaders(QStringLiteral(":/shaders/vertexLabel"), QStringLiteral(":/shaders/fragmentLabel")); @@ -302,6 +250,8 @@ void Bars3dRenderer::initializeOpenGL() // Load background mesh (we need to be initialized first) loadBackgroundMesh(); + + Abstract3DRenderer::initializeOpenGL(); } void Bars3dRenderer::render(QBarDataProxy *dataProxy, @@ -1537,10 +1487,6 @@ void Bars3dRenderer::requestSelectionAtPoint(const QPoint &point) void Bars3dRenderer::handleResize() { - if (m_cachedBoundingRect.width() == 0 || m_cachedBoundingRect.height() == 0) - return; - qDebug() << "Bars3dRenderer::resizeEvent " << m_cachedBoundingRect.width() << "x" <<m_cachedBoundingRect.height(); - // Set view port if (m_cachedIsSlicingActivated) { m_mainViewPort = QRect(0, @@ -1551,22 +1497,6 @@ void Bars3dRenderer::handleResize() m_mainViewPort = QRect(0, 0, m_cachedBoundingRect.width(), m_cachedBoundingRect.height()); } m_sliceViewPort = QRect(0, 0, m_cachedBoundingRect.width(), m_cachedBoundingRect.height()); - - // Calculate zoom level based on aspect ratio - GLfloat div; - GLfloat zoomAdjustment; - div = qMin(m_cachedBoundingRect.width(), m_cachedBoundingRect.height()); - zoomAdjustment = defaultRatio * ((m_cachedBoundingRect.width() / div) / (m_cachedBoundingRect.height() / div)); - //qDebug() << "zoom adjustment" << zoomAdjustment; - m_autoScaleAdjustment = qMin(zoomAdjustment, 1.0f); // clamp to 1.0f - - // Re-init selection buffer - initSelectionBuffer(); - -#if !defined(QT_OPENGL_ES_2) - // Re-init depth buffer - updateDepthBuffer(); -#endif } void Bars3dRenderer::updateBarSpecs(QSizeF thickness, QSizeF spacing, bool relative) @@ -1619,40 +1549,6 @@ void Bars3dRenderer::updateSampleSpace(int rowCount, int columnCount) calculateSceneScalingFactors(); } -void Bars3dRenderer::updateTheme(Theme theme) -{ - m_cachedTheme.setFromTheme(theme); - - m_drawer->setTheme(m_cachedTheme); - // Re-initialize shaders -#if !defined(QT_OPENGL_ES_2) - if (m_cachedShadowQuality > ShadowNone) { - if (!m_cachedTheme.m_uniformColor) { - initShaders(QStringLiteral(":/shaders/vertexShadow"), - QStringLiteral(":/shaders/fragmentShadowNoTexColorOnY")); - } else { - initShaders(QStringLiteral(":/shaders/vertexShadow"), - QStringLiteral(":/shaders/fragmentShadowNoTex")); - } - } else { - if (!m_cachedTheme.m_uniformColor) { - initShaders(QStringLiteral(":/shaders/vertex"), - QStringLiteral(":/shaders/fragmentColorOnY")); - } else { - initShaders(QStringLiteral(":/shaders/vertex"), - QStringLiteral(":/shaders/fragment")); - } - } -#else - if (!m_cachedTheme.m_uniformColor) { - initShaders(QStringLiteral(":/shaders/vertexES2"), - QStringLiteral(":/shaders/fragmentColorOnYES2")); - } else { - initShaders(QStringLiteral(":/shaders/vertexES2"), - QStringLiteral(":/shaders/fragmentES2")); - } -#endif -} void Bars3dRenderer::updateSelectionMode(SelectionMode mode) { @@ -1668,17 +1564,8 @@ void Bars3dRenderer::updateSelectionMode(SelectionMode mode) } } -void Bars3dRenderer::updateFont(const QFont &font) -{ - m_cachedFont = font; - m_drawer->setFont(font); -} -void Bars3dRenderer::updateLabelTransparency(LabelTransparency transparency) -{ - m_cachedLabelTransparency = transparency; - m_drawer->setTransparency(transparency); -} + void Bars3dRenderer::updateGridEnabled(bool enable) { @@ -1762,17 +1649,6 @@ void Bars3dRenderer::updateTickCount(GLint tickCount, GLfloat step, GLfloat mini } } -void Bars3dRenderer::updateBoundingRect(const QRect boundingRect) -{ - m_cachedBoundingRect = boundingRect; - handleResize(); -} - -void Bars3dRenderer::updatePosition(const QRect boundingRect) -{ - m_cachedBoundingRect = boundingRect; -} - void Bars3dRenderer::loadBarMesh() { QString objectFileName = m_cachedObjFile; |