summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2013-10-11 11:50:10 +0300
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2013-10-11 11:55:38 +0300
commitf00046bf71227ddc1332e54951bb8ed0ac1a4d1a (patch)
treef54d8c3e40796c860f2e4204ecefca2ebfc09129
parenta483fa13f4d4acebe0bb21fc569a8de23b76b56f (diff)
Make grid visibility affect surface slice mode
Change-Id: I26d4b150cb7cd2aa30b651ee92bbd90554d63187 Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
-rw-r--r--src/datavisualization/engine/surface3drenderer.cpp171
1 files changed, 87 insertions, 84 deletions
diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp
index 8d0d7203..4a718066 100644
--- a/src/datavisualization/engine/surface3drenderer.cpp
+++ b/src/datavisualization/engine/surface3drenderer.cpp
@@ -561,36 +561,79 @@ void Surface3DRenderer::drawSlicedScene()
// Disable textures
glDisable(GL_TEXTURE_2D);
- ShaderHelper *lineShader = m_backgroundShader;
- // Bind line shader
- lineShader->bind();
-
// lines to the back
- if (m_axisCacheY.segmentCount() > 0) {
- QVector3D gridLineScaleX(scaleXBackground, gridLineWidth, gridLineWidth);
+ if (m_cachedIsGridEnabled && m_heightNormalizer) {
+ ShaderHelper *lineShader = m_backgroundShader;
+ // 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);
- // Back wall
- GLfloat lineStep = 2.0f * m_axisCacheY.subSegmentStep() / m_heightNormalizer;
- GLfloat linePos = -1.0f;
- int lastSegment = m_axisCacheY.subSegmentCount() * m_axisCacheY.segmentCount();
+ // 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;
+ int lastSegment = m_axisCacheY.subSegmentCount() * m_axisCacheY.segmentCount();
+
+ for (int segment = 0; segment <= lastSegment; segment++) {
+ QMatrix4x4 modelMatrix;
+ QMatrix4x4 MVPMatrix;
+ QMatrix4x4 itModelMatrix;
+
+ modelMatrix.translate(0.0f, linePos, zComp - sliceZScale);
+
+ modelMatrix.scale(gridLineScaleX);
+ itModelMatrix.scale(gridLineScaleX);
+
+ MVPMatrix = projectionViewMatrix * modelMatrix;
+
+ // Set the rest of the shader bindings
+ lineShader->setUniformValue(lineShader->model(), modelMatrix);
+ lineShader->setUniformValue(lineShader->nModel(),
+ itModelMatrix.inverted().transposed());
+ lineShader->setUniformValue(lineShader->MVP(), MVPMatrix);
+
+ // Draw the object
+ m_drawer->drawObject(lineShader, m_gridLineObj);
+
+ linePos += lineStep;
+ }
+ }
+
+ // Floor lines
+ QVector3D gridLineScaleZ(gridLineWidth, gridLineWidth, sliceZScale);
+ QVector3D gridLineScaleY(gridLineWidth, backgroundMargin, gridLineWidth);
+
+ int lastSegment;
+ GLfloat lineStep;
+ GLfloat linePos;
+ if (m_cachedSelectionMode == QDataVis::SelectionModeSliceRow) {
+ lineStep = -2.0f * aspectRatio * m_axisCacheX.subSegmentStep() / m_scaleFactor;
+ lastSegment = m_axisCacheX.subSegmentCount() * m_axisCacheX.segmentCount();
+ linePos = m_scaleX;
+ } else {
+ lineStep = -2.0f * aspectRatio * m_axisCacheZ.subSegmentStep() / m_scaleFactor;
+ lastSegment = m_axisCacheZ.subSegmentCount() * m_axisCacheZ.segmentCount();
+ linePos = m_scaleZ;
+ }
for (int segment = 0; segment <= lastSegment; segment++) {
QMatrix4x4 modelMatrix;
QMatrix4x4 MVPMatrix;
QMatrix4x4 itModelMatrix;
- modelMatrix.translate(0.0f, linePos, zComp - sliceZScale);
+ modelMatrix.translate(linePos, -backgroundMargin, zComp);
- modelMatrix.scale(gridLineScaleX);
- itModelMatrix.scale(gridLineScaleX);
+ modelMatrix.scale(gridLineScaleZ);
+ itModelMatrix.scale(gridLineScaleZ);
MVPMatrix = projectionViewMatrix * modelMatrix;
@@ -605,80 +648,39 @@ void Surface3DRenderer::drawSlicedScene()
linePos += lineStep;
}
- }
- // Floor lines
- QVector3D gridLineScaleZ(gridLineWidth, gridLineWidth, sliceZScale);
- QVector3D gridLineScaleY(gridLineWidth, backgroundMargin, gridLineWidth);
-
- int lastSegment;
- GLfloat lineStep;
- GLfloat linePos;
- if (m_cachedSelectionMode == QDataVis::SelectionModeSliceRow) {
- lineStep = -2.0f * aspectRatio * m_axisCacheX.subSegmentStep() / m_scaleFactor;
- lastSegment = m_axisCacheX.subSegmentCount() * m_axisCacheX.segmentCount();
- linePos = m_scaleX;
- } else {
- lineStep = -2.0f * aspectRatio * m_axisCacheZ.subSegmentStep() / m_scaleFactor;
- lastSegment = m_axisCacheZ.subSegmentCount() * m_axisCacheZ.segmentCount();
- linePos = m_scaleZ;
- }
-
- for (int segment = 0; segment <= lastSegment; segment++) {
- QMatrix4x4 modelMatrix;
- QMatrix4x4 MVPMatrix;
- QMatrix4x4 itModelMatrix;
-
- modelMatrix.translate(linePos, -backgroundMargin, zComp);
-
- modelMatrix.scale(gridLineScaleZ);
- itModelMatrix.scale(gridLineScaleZ);
-
- MVPMatrix = projectionViewMatrix * modelMatrix;
-
- // Set the rest of the shader bindings
- lineShader->setUniformValue(lineShader->model(), modelMatrix);
- lineShader->setUniformValue(lineShader->nModel(),
- itModelMatrix.inverted().transposed());
- lineShader->setUniformValue(lineShader->MVP(), MVPMatrix);
-
- // Draw the object
- m_drawer->drawObject(lineShader, m_gridLineObj);
-
- linePos += lineStep;
- }
+ if (m_cachedSelectionMode == QDataVis::SelectionModeSliceRow)
+ linePos = m_scaleX;
+ else
+ linePos = m_scaleZ;
- if (m_cachedSelectionMode == QDataVis::SelectionModeSliceRow)
- linePos = m_scaleX;
- else
- linePos = m_scaleZ;
+ for (int segment = 0; segment <= lastSegment; segment++) {
+ QMatrix4x4 modelMatrix;
+ QMatrix4x4 MVPMatrix;
+ QMatrix4x4 itModelMatrix;
- for (int segment = 0; segment <= lastSegment; segment++) {
- QMatrix4x4 modelMatrix;
- QMatrix4x4 MVPMatrix;
- QMatrix4x4 itModelMatrix;
+ modelMatrix.translate(linePos, 0.0f, zComp - sliceZScale);
+ modelMatrix.scale(gridLineScaleY);
+ itModelMatrix.scale(gridLineScaleY);
- modelMatrix.translate(linePos, 0.0f, zComp - sliceZScale);
- modelMatrix.scale(gridLineScaleY);
- itModelMatrix.scale(gridLineScaleY);
+ MVPMatrix = projectionViewMatrix * modelMatrix;
- MVPMatrix = projectionViewMatrix * modelMatrix;
+ // Set the rest of the shader bindings
+ lineShader->setUniformValue(lineShader->model(), modelMatrix);
+ lineShader->setUniformValue(lineShader->nModel(),
+ itModelMatrix.inverted().transposed());
+ lineShader->setUniformValue(lineShader->MVP(), MVPMatrix);
- // Set the rest of the shader bindings
- lineShader->setUniformValue(lineShader->model(), modelMatrix);
- lineShader->setUniformValue(lineShader->nModel(),
- itModelMatrix.inverted().transposed());
- lineShader->setUniformValue(lineShader->MVP(), MVPMatrix);
+ // Draw the object
+ m_drawer->drawObject(lineShader, m_gridLineObj);
- // Draw the object
- m_drawer->drawObject(lineShader, m_gridLineObj);
+ linePos += lineStep;
+ }
- linePos += lineStep;
+ // Release line shader
+ lineShader->release();
}
- // Release line shader
- lineShader->release();
-
// Draw axis labels
m_labelShader->bind();
glEnable(GL_TEXTURE_2D);
@@ -715,6 +717,7 @@ void Surface3DRenderer::drawSlicedScene()
// X Labels to ground
int countLabelItems;
+ int lastSegment;
if (m_cachedSelectionMode == QDataVis::SelectionModeSliceRow) {
posStep = 2.0f * aspectRatio * m_axisCacheX.segmentStep() / m_scaleFactor;
labelPos = -m_scaleX;