summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2014-01-13 13:42:21 +0200
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2014-01-13 14:19:49 +0200
commit828a2579530ea8c9bc3a0c5ef2cc11da2c247417 (patch)
treed447cf92b5a6434ddad2a4977a62df8aefb53d76 /src/datavisualization/engine
parent17fb42f3ff672f5215931e6553d2701dcd4ebfa5 (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.cpp36
-rw-r--r--src/datavisualization/engine/surface3drenderer.cpp34
-rw-r--r--src/datavisualization/engine/surface3drenderer_p.h1
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;