summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMika Salmela <mika.salmela@digia.com>2014-03-14 15:51:43 +0200
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2014-03-17 08:07:29 +0200
commit389a29326efc298fd75899a45a0dc768b27152d5 (patch)
treed192bb80962b28795d2c5afaa05b73fc1be25420
parente0da339a9d1726cf49675537895e737b5001f31c (diff)
Fix surface slice problem on Mac
Separate shader for slice surfaces. Change-Id: I29f89dc718a4a5dde8d78e1f602283889087bf23 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
-rw-r--r--src/datavisualization/engine/surface3drenderer.cpp23
-rw-r--r--src/datavisualization/engine/surface3drenderer_p.h2
2 files changed, 24 insertions, 1 deletions
diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp
index ffcdeb7a..41415393 100644
--- a/src/datavisualization/engine/surface3drenderer.cpp
+++ b/src/datavisualization/engine/surface3drenderer.cpp
@@ -55,6 +55,8 @@ Surface3DRenderer::Surface3DRenderer(Surface3DController *controller)
m_surfaceFlatShader(0),
m_surfaceSmoothShader(0),
m_surfaceGridShader(0),
+ m_surfaceSliceFlatShader(0),
+ m_surfaceSliceSmoothShader(0),
m_selectionShader(0),
m_labelShader(0),
m_heightNormalizer(0.0f),
@@ -126,6 +128,8 @@ Surface3DRenderer::~Surface3DRenderer()
delete m_surfaceFlatShader;
delete m_surfaceSmoothShader;
delete m_surfaceGridShader;
+ delete m_surfaceSliceFlatShader;
+ delete m_surfaceSliceSmoothShader;
delete m_labelShader;
delete m_backgroundObj;
@@ -795,7 +799,10 @@ void Surface3DRenderer::drawSlicedScene()
cache->setMVPMatrix(MVPMatrix);
if (cache->surfaceVisible()) {
- ShaderHelper *surfaceShader = m_surfaceFlatShader;
+ ShaderHelper *surfaceShader = m_surfaceSliceSmoothShader;
+ if (cache->isFlatShadingEnabled())
+ surfaceShader = m_surfaceSliceFlatShader;
+
surfaceShader->bind();
GLuint colorTexture = cache->baseUniformTexture();;
@@ -2388,6 +2395,10 @@ void Surface3DRenderer::initShaders(const QString &vertexShader, const QString &
delete m_surfaceFlatShader;
if (m_surfaceSmoothShader)
delete m_surfaceSmoothShader;
+ if (m_surfaceSliceFlatShader)
+ delete m_surfaceSliceFlatShader;
+ if (m_surfaceSliceSmoothShader)
+ delete m_surfaceSliceSmoothShader;
#if !defined(QT_OPENGL_ES_2)
if (m_cachedShadowQuality > QAbstract3DGraph::ShadowQualityNone) {
@@ -2404,14 +2415,24 @@ void Surface3DRenderer::initShaders(const QString &vertexShader, const QString &
m_surfaceFlatShader = new ShaderHelper(this, QStringLiteral(":/shaders/vertexSurfaceFlat"),
QStringLiteral(":/shaders/fragmentSurfaceFlat"));
}
+ m_surfaceSliceSmoothShader = new ShaderHelper(this, QStringLiteral(":/shaders/vertex"),
+ QStringLiteral(":/shaders/fragmentSurface"));
+ m_surfaceSliceFlatShader = new ShaderHelper(this, QStringLiteral(":/shaders/vertexSurfaceFlat"),
+ QStringLiteral(":/shaders/fragmentSurfaceFlat"));
#else
m_surfaceSmoothShader = new ShaderHelper(this, QStringLiteral(":/shaders/vertex"),
QStringLiteral(":/shaders/fragmentSurfaceES2"));
m_surfaceFlatShader = new ShaderHelper(this, QStringLiteral(":/shaders/vertex"),
QStringLiteral(":/shaders/fragmentSurfaceES2"));
+ m_surfaceSliceSmoothShader = new ShaderHelper(this, QStringLiteral(":/shaders/vertex"),
+ QStringLiteral(":/shaders/fragmentSurfaceES2"));
+ m_surfaceSliceFlatShader = new ShaderHelper(this, QStringLiteral(":/shaders/vertex"),
+ QStringLiteral(":/shaders/fragmentSurfaceES2"));
#endif
m_surfaceSmoothShader->initialize();
m_surfaceFlatShader->initialize();
+ m_surfaceSliceSmoothShader->initialize();
+ m_surfaceSliceFlatShader->initialize();
}
void Surface3DRenderer::initBackgroundShaders(const QString &vertexShader,
diff --git a/src/datavisualization/engine/surface3drenderer_p.h b/src/datavisualization/engine/surface3drenderer_p.h
index 7a4422e4..2c55d902 100644
--- a/src/datavisualization/engine/surface3drenderer_p.h
+++ b/src/datavisualization/engine/surface3drenderer_p.h
@@ -57,6 +57,8 @@ private:
ShaderHelper *m_surfaceFlatShader;
ShaderHelper *m_surfaceSmoothShader;
ShaderHelper *m_surfaceGridShader;
+ ShaderHelper *m_surfaceSliceFlatShader;
+ ShaderHelper *m_surfaceSliceSmoothShader;
ShaderHelper *m_selectionShader;
ShaderHelper *m_labelShader;
GLfloat m_heightNormalizer;