From 389a29326efc298fd75899a45a0dc768b27152d5 Mon Sep 17 00:00:00 2001 From: Mika Salmela Date: Fri, 14 Mar 2014 15:51:43 +0200 Subject: Fix surface slice problem on Mac Separate shader for slice surfaces. Change-Id: I29f89dc718a4a5dde8d78e1f602283889087bf23 Reviewed-by: Miikka Heikkinen --- src/datavisualization/engine/surface3drenderer.cpp | 23 +++++++++++++++++++++- src/datavisualization/engine/surface3drenderer_p.h | 2 ++ 2 files changed, 24 insertions(+), 1 deletion(-) (limited to 'src/datavisualization/engine') 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; -- cgit v1.2.3