diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-01-13 13:42:21 +0200 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-01-13 14:19:49 +0200 |
commit | 828a2579530ea8c9bc3a0c5ef2cc11da2c247417 (patch) | |
tree | d447cf92b5a6434ddad2a4977a62df8aefb53d76 /src/datavisualization/engine | |
parent | 17fb42f3ff672f5215931e6553d2701dcd4ebfa5 (diff) |
Fix highlight color in slice mode
Also fixes the wandering selection ball when resizing surface graph.
Change-Id: Iacb29809ee9b240839956142f9f5ba78d0294620
Reviewed-by: Mika Salmela <mika.salmela@digia.com>
Diffstat (limited to 'src/datavisualization/engine')
-rw-r--r-- | src/datavisualization/engine/bars3drenderer.cpp | 36 | ||||
-rw-r--r-- | src/datavisualization/engine/surface3drenderer.cpp | 34 | ||||
-rw-r--r-- | src/datavisualization/engine/surface3drenderer_p.h | 1 |
3 files changed, 35 insertions, 36 deletions
diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp index ba9f842c..0a477d53 100644 --- a/src/datavisualization/engine/bars3drenderer.cpp +++ b/src/datavisualization/engine/bars3drenderer.cpp @@ -323,8 +323,8 @@ void Bars3DRenderer::drawSlicedScene() lineShader->setUniformValue(lineShader->lightP(), lightPos); lineShader->setUniformValue(lineShader->view(), viewMatrix); lineShader->setUniformValue(lineShader->color(), lineColor); - lineShader->setUniformValue(lineShader->ambientS(), m_cachedTheme->ambientLightStrength() * 2.0f); - lineShader->setUniformValue(lineShader->lightS(), 0.25f); + lineShader->setUniformValue(lineShader->ambientS(), m_cachedTheme->ambientLightStrength() * 2.3f); + lineShader->setUniformValue(lineShader->lightS(), 0.0f); GLfloat scaleFactor = 0.0f; if (rowMode) @@ -438,15 +438,15 @@ void Bars3DRenderer::drawSlicedScene() m_barShader->bind(); m_barShader->setUniformValue(m_barShader->lightP(), lightPos); m_barShader->setUniformValue(m_barShader->view(), viewMatrix); - m_barShader->setUniformValue(m_barShader->lightS(), 0.5f); + m_barShader->setUniformValue(m_barShader->lightS(), 0.15f); m_barShader->setUniformValue(m_barShader->ambientS(), - m_cachedTheme->ambientLightStrength() * 2.0f); + m_cachedTheme->ambientLightStrength() * 2.3f); m_barGradientShader->bind(); m_barGradientShader->setUniformValue(m_barGradientShader->lightP(), lightPos); m_barGradientShader->setUniformValue(m_barGradientShader->view(), viewMatrix); - m_barGradientShader->setUniformValue(m_barGradientShader->lightS(), 0.5f); + m_barGradientShader->setUniformValue(m_barGradientShader->lightS(), 0.15f); m_barGradientShader->setUniformValue(m_barGradientShader->ambientS(), - m_cachedTheme->ambientLightStrength() * 2.0f); + m_cachedTheme->ambientLightStrength() * 2.3f); m_barGradientShader->setUniformValue(m_barGradientShader->gradientMin(), 0.0f); // Default to uniform shader @@ -457,10 +457,10 @@ void Bars3DRenderer::drawSlicedScene() Q3DTheme::ColorStyle previousColorStyle = Q3DTheme::ColorStyleUniform; Q3DTheme::ColorStyle colorStyle = Q3DTheme::ColorStyleUniform; ObjectHelper *barObj = 0; - QVector3D barHighlightColor; - QVector3D rowHighlightColor; - GLuint barGradientTexture = 0; - GLuint rowGradientTexture = 0; + QVector3D highlightColor; + QVector3D baseColor; + GLuint highlightGradientTexture = 0; + GLuint baseGradientTexture = 0; const SeriesRenderCache *currentSeries = 0; bool colorStyleIsUniform = true; @@ -477,11 +477,11 @@ void Bars3DRenderer::drawSlicedScene() colorStyle = currentSeries->colorStyle(); colorStyleIsUniform = (colorStyle == Q3DTheme::ColorStyleUniform); if (colorStyleIsUniform) { - barHighlightColor = currentSeries->singleHighlightColor(); - rowHighlightColor = currentSeries->multiHighlightColor(); + highlightColor = currentSeries->singleHighlightColor(); + baseColor = currentSeries->baseColor(); } else { - barGradientTexture = currentSeries->singleHighlightGradientTexture(); - rowGradientTexture = currentSeries->multiHighlightGradientTexture(); + highlightGradientTexture = currentSeries->singleHighlightGradientTexture(); + baseGradientTexture = currentSeries->baseGradientTexture(); } // Rebind shader if it has changed @@ -535,14 +535,14 @@ void Bars3DRenderer::drawSlicedScene() if (itemMode && m_visualSelectedBarPos.x() == item->position().x() && m_visualSelectedBarPos.y() == item->position().y()) { if (colorStyleIsUniform) - barColor = barHighlightColor; + barColor = highlightColor; else - gradientTexture = barGradientTexture; + gradientTexture = highlightGradientTexture; } else { if (colorStyleIsUniform) - barColor = rowHighlightColor; + barColor = baseColor; else - gradientTexture = rowGradientTexture; + gradientTexture = baseGradientTexture; } if (item->height() != 0) { diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp index 13a95670..b08558b2 100644 --- a/src/datavisualization/engine/surface3drenderer.cpp +++ b/src/datavisualization/engine/surface3drenderer.cpp @@ -61,7 +61,6 @@ Surface3DRenderer::Surface3DRenderer(Surface3DController *controller) m_font(QFont(QStringLiteral("Arial"))), m_isGridEnabled(true), m_cachedIsSlicingActivated(false), - m_shader(0), m_depthShader(0), m_backgroundShader(0), m_surfaceShader(0), @@ -145,7 +144,6 @@ Surface3DRenderer::~Surface3DRenderer() m_textureHelper->deleteTexture(&m_selectionResultTexture); m_textureHelper->deleteTexture(&m_uniformGradientTexture); } - delete m_shader; delete m_depthShader; delete m_backgroundShader; delete m_selectionShader; @@ -540,8 +538,10 @@ void Surface3DRenderer::updateScene(Q3DScene *scene) Abstract3DRenderer::updateScene(scene); - if (m_selectionPointer) + if (m_selectionPointer) { m_selectionPointer->updateScene(m_cachedScene); + m_selectionDirty = true; // Ball may need repositioning if scene changes + } updateSlicingActive(scene->isSlicingActive()); } @@ -608,6 +608,9 @@ void Surface3DRenderer::drawSlicedScene() QMatrix4x4 modelMatrix; QMatrix4x4 itModelMatrix; + // TODO: Do properly when multiseries support implemented QTRD-2657 + const SeriesRenderCache &series = m_visibleSeriesList.at(0); + modelMatrix.translate(offset, 0.0f, 0.0f); QVector3D scaling(scaleX, 1.0f, sliceZScale); modelMatrix.scale(scaling); @@ -621,11 +624,12 @@ void Surface3DRenderer::drawSlicedScene() glPolygonOffset(0.5f, 1.0f); } - ShaderHelper *surfaceShader = m_shader; + ShaderHelper *surfaceShader = m_surfaceShader; surfaceShader->bind(); - QVector3D color; - color = Utils::vectorFromColor(m_cachedTheme->multiHighlightColor()); + GLuint baseGradientTexture = m_uniformGradientTexture; + if (series.colorStyle() != Q3DTheme::ColorStyleUniform) + baseGradientTexture = series.baseGradientTexture(); // Set shader bindings surfaceShader->setUniformValue(surfaceShader->lightP(), lightPos); @@ -634,12 +638,11 @@ void Surface3DRenderer::drawSlicedScene() surfaceShader->setUniformValue(surfaceShader->nModel(), itModelMatrix.inverted().transposed()); surfaceShader->setUniformValue(surfaceShader->MVP(), MVPMatrix); - surfaceShader->setUniformValue(surfaceShader->color(), color); - surfaceShader->setUniformValue(surfaceShader->lightS(), 0.25f); + surfaceShader->setUniformValue(surfaceShader->lightS(), 0.15f); surfaceShader->setUniformValue(surfaceShader->ambientS(), - m_cachedTheme->ambientLightStrength() * 2.0f); + m_cachedTheme->ambientLightStrength() * 2.3f); - m_drawer->drawObject(surfaceShader, m_sliceSurfaceObj); + m_drawer->drawObject(surfaceShader, m_sliceSurfaceObj, baseGradientTexture); } // Draw surface grid @@ -668,8 +671,8 @@ void Surface3DRenderer::drawSlicedScene() lineShader->setUniformValue(lineShader->lightP(), lightPos); lineShader->setUniformValue(lineShader->view(), viewMatrix); lineShader->setUniformValue(lineShader->color(), lineColor); - lineShader->setUniformValue(lineShader->ambientS(), m_cachedTheme->ambientLightStrength() * 2.0f); - lineShader->setUniformValue(lineShader->lightS(), 0.25f); + lineShader->setUniformValue(lineShader->ambientS(), m_cachedTheme->ambientLightStrength() * 2.3f); + lineShader->setUniformValue(lineShader->lightS(), 0.0f); // Horizontal lines if (m_axisCacheY.segmentCount() > 0) { @@ -2059,11 +2062,8 @@ void Surface3DRenderer::loadLabelMesh() void Surface3DRenderer::initShaders(const QString &vertexShader, const QString &fragmentShader) { - // m_shader is used slice view surface only. - if (m_shader) - delete m_shader; - m_shader = new ShaderHelper(this, vertexShader, fragmentShader); - m_shader->initialize(); + Q_UNUSED(vertexShader); + Q_UNUSED(fragmentShader); // draw the shader for the surface according to smooth status, shadow and uniform color if (m_surfaceShader) diff --git a/src/datavisualization/engine/surface3drenderer_p.h b/src/datavisualization/engine/surface3drenderer_p.h index f70fde9b..71e02db5 100644 --- a/src/datavisualization/engine/surface3drenderer_p.h +++ b/src/datavisualization/engine/surface3drenderer_p.h @@ -69,7 +69,6 @@ private: bool m_cachedIsSlicingActivated; // Internal attributes purely related to how the scene is drawn with GL. - ShaderHelper *m_shader; ShaderHelper *m_depthShader; ShaderHelper *m_backgroundShader; ShaderHelper *m_surfaceShader; |