From 0144b397eff1340497ac2e599f7d9238bf99609c Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Wed, 8 Jan 2014 11:32:33 +0200 Subject: Enable showing multiple graphs in QML MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit + other minor fixes Task-number: QTRD-2749 Change-Id: I654d41fd4124d6596f9df3ace7019706452d8bfa Reviewed-by: Pasi Keränen --- src/datavisualization/engine/abstract3drenderer.cpp | 6 ++++++ src/datavisualization/engine/scatter3drenderer.cpp | 9 +++++++++ src/datavisualization/engine/surface3drenderer.cpp | 5 +++++ 3 files changed, 20 insertions(+) (limited to 'src/datavisualization/engine') diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp index 32435946..19b9a8c8 100644 --- a/src/datavisualization/engine/abstract3drenderer.cpp +++ b/src/datavisualization/engine/abstract3drenderer.cpp @@ -122,9 +122,15 @@ void Abstract3DRenderer::render(const GLuint defaultFboHandle) m_viewport.y(), m_viewport.width(), m_viewport.height()); + glScissor(m_viewport.x(), + m_viewport.y(), + m_viewport.width(), + m_viewport.height()); + glEnable(GL_SCISSOR_TEST); QVector3D clearColor = Utils::vectorFromColor(m_cachedTheme->windowColor()); glClearColor(clearColor.x(), clearColor.y(), clearColor.z(), 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glDisable(GL_SCISSOR_TEST); } QString Abstract3DRenderer::generateValueLabel(const QString &format, float value) diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp index b70fd5b4..85863519 100644 --- a/src/datavisualization/engine/scatter3drenderer.cpp +++ b/src/datavisualization/engine/scatter3drenderer.cpp @@ -454,6 +454,10 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) && SelectOnScene == m_selectionState && seriesCount > 0) { // Draw dots to selection buffer glBindFramebuffer(GL_FRAMEBUFFER, m_selectionFrameBuffer); + glViewport(0, 0, + m_primarySubViewport.width(), + m_primarySubViewport.height()); + glEnable(GL_DEPTH_TEST); // Needed, otherwise the depth render buffer is not used glClearColor(1.0f, 1.0f, 1.0f, 1.0f); // Set clear color to white (= skipColor) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Needed for clearing the frame buffer @@ -552,7 +556,12 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle) selectionColorToSeriesAndIndex(clickedColor, clickedIndex, clickedSeries); emit itemClicked(clickedIndex, clickedSeries); + // Revert to original fbo and viewport glBindFramebuffer(GL_FRAMEBUFFER, defaultFboHandle); + glViewport(m_primarySubViewport.x(), + m_primarySubViewport.y(), + m_primarySubViewport.width(), + m_primarySubViewport.height()); #if 0 // Use this if you want to see what is being drawn to the framebuffer m_labelShader->bind(); diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp index 912edd97..13a95670 100644 --- a/src/datavisualization/engine/surface3drenderer.cpp +++ b/src/datavisualization/engine/surface3drenderer.cpp @@ -881,6 +881,7 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle) // Render scene into a depth texture for using with shadow mapping // Enable drawing to depth framebuffer glBindFramebuffer(GL_FRAMEBUFFER, m_depthFrameBuffer); + // Attach texture to depth attachment glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_depthTexture, 0); glClear(GL_DEPTH_BUFFER_BIT); @@ -2147,6 +2148,10 @@ void Surface3DRenderer::updateDepthBuffer() m_textureHelper->deleteTexture(&m_depthTexture); m_depthTexture = 0; } + if (m_depthModelTexture) { + m_textureHelper->deleteTexture(&m_depthModelTexture); + m_depthModelTexture = 0; + } if (m_primarySubViewport.size().isEmpty()) return; -- cgit v1.2.3