summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMika Salmela <mika.salmela@digia.com>2014-10-10 15:56:47 +0300
committerTomi Korpipää <tomi.korpipaa@digia.com>2014-10-13 06:39:49 +0300
commit9b35362d50200de75e5c685840c00346d37dcf48 (patch)
tree8144ca28d22e6b163e7aed7cbc9dd219666a5689
parentfd9486b6cbe28a766450e35ad97d845584f56fb1 (diff)
Remove separate depth texture for surface shadows
Use the same depth texture for the backwall and the surfaces. No need to any culled texture. Task-number: QTRD-3160 Change-Id: I7a4e8aa61b98d5264a92173174e911e50af8d52a Reviewed-by: Miikka Heikkinen <miikka.heikkinen@theqtcompany.com> Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
-rw-r--r--src/datavisualization/engine/surface3drenderer.cpp49
-rw-r--r--src/datavisualization/engine/surface3drenderer_p.h1
2 files changed, 6 insertions, 44 deletions
diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp
index 15df5598..5daded8f 100644
--- a/src/datavisualization/engine/surface3drenderer.cpp
+++ b/src/datavisualization/engine/surface3drenderer.cpp
@@ -53,7 +53,6 @@ Surface3DRenderer::Surface3DRenderer(Surface3DController *controller)
m_scaleX(0.0f),
m_scaleY(0.0f),
m_scaleZ(0.0f),
- m_depthModelTexture(0),
m_depthFrameBuffer(0),
m_selectionFrameBuffer(0),
m_selectionDepthBuffer(0),
@@ -93,7 +92,6 @@ Surface3DRenderer::~Surface3DRenderer()
m_textureHelper->deleteTexture(&m_noShadowTexture);
m_textureHelper->deleteTexture(&m_depthTexture);
- m_textureHelper->deleteTexture(&m_depthModelTexture);
m_textureHelper->deleteTexture(&m_selectionResultTexture);
}
delete m_depthShader;
@@ -1202,6 +1200,7 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle)
/ (GLfloat)m_primarySubViewport.height(), 3.0f, 100.0f);
depthProjectionViewMatrix = depthProjectionMatrix * depthViewMatrix;
+ // Surface is not closed, so don't cull anything
glDisable(GL_CULL_FACE);
foreach (SeriesRenderCache *baseCache, m_renderCacheList) {
@@ -1231,46 +1230,15 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle)
}
}
- glEnable(GL_CULL_FACE);
- glCullFace(GL_FRONT);
-
- Abstract3DRenderer::drawCustomItems(RenderingDepth, m_depthShader, viewMatrix,
- projectionViewMatrix,
- depthProjectionViewMatrix, m_depthTexture,
- m_shadowQualityToShader);
-
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D,
- m_depthModelTexture, 0);
- glClear(GL_DEPTH_BUFFER_BIT);
-
- foreach (SeriesRenderCache *baseCache, m_renderCacheList) {
- SurfaceSeriesRenderCache *cache = static_cast<SurfaceSeriesRenderCache *>(baseCache);
- SurfaceObject *object = cache->surfaceObject();
- if (object->indexCount() && cache->surfaceVisible() && cache->isVisible()
- && cache->sampleSpace().width() >= 2 && cache->sampleSpace().height() >= 2) {
- m_depthShader->setUniformValue(m_depthShader->MVP(), cache->MVPMatrix());
-
- // 1st attribute buffer : vertices
- glEnableVertexAttribArray(m_depthShader->posAtt());
- glBindBuffer(GL_ARRAY_BUFFER, object->vertexBuf());
- glVertexAttribPointer(m_depthShader->posAtt(), 3, GL_FLOAT, GL_FALSE, 0,
- (void *)0);
-
- // Index buffer
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, object->elementBuf());
-
- // Draw the triangles
- glDrawElements(GL_TRIANGLES, object->indexCount(),
- object->indicesType(), (void *)0);
- }
- }
-
// Free buffers
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glDisableVertexAttribArray(m_depthShader->posAtt());
+ glEnable(GL_CULL_FACE);
+ glCullFace(GL_FRONT);
+
Abstract3DRenderer::drawCustomItems(RenderingDepth, m_depthShader, viewMatrix,
projectionViewMatrix,
depthProjectionViewMatrix, m_depthTexture,
@@ -1453,7 +1421,7 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle)
// Draw the objects
m_drawer->drawObject(shader, cache->surfaceObject(), texture,
- m_depthModelTexture);
+ m_depthTexture);
} else
#endif
{
@@ -3025,7 +2993,6 @@ void Surface3DRenderer::initDepthShader()
void Surface3DRenderer::updateDepthBuffer()
{
m_textureHelper->deleteTexture(&m_depthTexture);
- m_textureHelper->deleteTexture(&m_depthModelTexture);
if (m_primarySubViewport.size().isEmpty())
return;
@@ -3034,11 +3001,7 @@ void Surface3DRenderer::updateDepthBuffer()
m_depthTexture = m_textureHelper->createDepthTextureFrameBuffer(m_primarySubViewport.size(),
m_depthFrameBuffer,
m_shadowQualityMultiplier);
- if (m_depthTexture) {
- m_depthModelTexture = m_textureHelper->createDepthTexture(m_primarySubViewport.size(),
- m_shadowQualityMultiplier);
- }
- if (!m_depthTexture || !m_depthModelTexture)
+ if (!m_depthTexture)
lowerShadowQuality();
}
}
diff --git a/src/datavisualization/engine/surface3drenderer_p.h b/src/datavisualization/engine/surface3drenderer_p.h
index b02bd456..090fe8a9 100644
--- a/src/datavisualization/engine/surface3drenderer_p.h
+++ b/src/datavisualization/engine/surface3drenderer_p.h
@@ -61,7 +61,6 @@ private:
float m_scaleX;
float m_scaleY;
float m_scaleZ;
- GLuint m_depthModelTexture;
GLuint m_depthFrameBuffer;
GLuint m_selectionFrameBuffer;
GLuint m_selectionDepthBuffer;