diff options
author | Mika Salmela <mika.salmela@digia.com> | 2013-11-15 15:21:36 +0200 |
---|---|---|
committer | Mika Salmela <mika.salmela@digia.com> | 2013-11-18 08:58:06 +0200 |
commit | 3ef798f18244e468fd558f36e161aeaf15a44564 (patch) | |
tree | 8aca491ab874b4f6ecc5bdb7d44748b01e08d213 /src | |
parent | 27241b083df419f3a2de928c1d3f5dd8f6459030 (diff) |
Initialization for depth texture
Precaution for using depth texture before nothing has been drawn.
Task-number: QTRD-2570
Change-Id: I47ece387542acbd1ffed8d650a70ecc471efb30e
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/datavisualization/engine/surface3drenderer.cpp | 3 | ||||
-rw-r--r-- | src/datavisualization/utils/texturehelper.cpp | 19 | ||||
-rw-r--r-- | src/datavisualization/utils/texturehelper_p.h | 1 |
3 files changed, 21 insertions, 2 deletions
diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp index 2ce1e345..e8b0a0f4 100644 --- a/src/datavisualization/engine/surface3drenderer.cpp +++ b/src/datavisualization/engine/surface3drenderer.cpp @@ -1060,7 +1060,7 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle) m_cachedTheme.m_ambientStrength * 2.0f); #if !defined(QT_OPENGL_ES_2) - if (m_cachedShadowQuality > QDataVis::ShadowQualityNone && m_cachedSurfaceVisible) { + if (m_cachedShadowQuality > QDataVis::ShadowQualityNone) { // Set shadow shader bindings QMatrix4x4 depthMVPMatrix = depthProjectionViewMatrix * modelMatrix; m_backgroundShader->setUniformValue(m_backgroundShader->shadowQ(), @@ -2103,6 +2103,7 @@ void Surface3DRenderer::updateDepthBuffer() m_depthTexture = m_textureHelper->createDepthTextureFrameBuffer(m_mainViewPort.size(), m_depthFrameBuffer, m_shadowQualityMultiplier); + m_textureHelper->fillDepthTexture(m_depthTexture, m_mainViewPort.size(), m_shadowQualityMultiplier, 1.0f); m_depthModelTexture = m_textureHelper->createDepthTexture(m_mainViewPort.size(), m_shadowQualityMultiplier); if (!m_depthTexture || !m_depthModelTexture) diff --git a/src/datavisualization/utils/texturehelper.cpp b/src/datavisualization/utils/texturehelper.cpp index cb18fcc2..41c5b452 100644 --- a/src/datavisualization/utils/texturehelper.cpp +++ b/src/datavisualization/utils/texturehelper.cpp @@ -182,7 +182,7 @@ GLuint TextureHelper::createDepthTexture(const QSize &size, GLuint textureSize) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, GL_COMPARE_R_TO_TEXTURE_ARB); glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, size.width() * textureSize, - size.height() * textureSize, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL); + size.height() * textureSize, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL); glBindTexture(GL_TEXTURE_2D, 0); return depthtextureid; @@ -219,6 +219,23 @@ GLuint TextureHelper::createDepthTextureFrameBuffer(const QSize &size, GLuint &f } #endif +#if !defined(QT_OPENGL_ES_2) +void TextureHelper::fillDepthTexture(GLuint texture,const QSize &size, GLuint textureSize, GLfloat value) +{ + int nItems = size.width() * textureSize * size.height() * textureSize; + GLfloat *bits = new GLfloat[nItems]; + for (int i = 0; i < nItems; i++) + bits[i] = value; + + glBindTexture(GL_TEXTURE_2D, texture); + glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, size.width() * textureSize, + size.height() * textureSize, 0, GL_DEPTH_COMPONENT, GL_FLOAT, bits); + glBindTexture(GL_TEXTURE_2D, 0); + + delete[] bits; +} +#endif + void TextureHelper::deleteTexture(const GLuint *texture) { glDeleteTextures(1, texture); diff --git a/src/datavisualization/utils/texturehelper_p.h b/src/datavisualization/utils/texturehelper_p.h index 84570a13..11022495 100644 --- a/src/datavisualization/utils/texturehelper_p.h +++ b/src/datavisualization/utils/texturehelper_p.h @@ -53,6 +53,7 @@ class TextureHelper : protected QOpenGLFunctions GLuint createDepthTexture(const QSize &size, GLuint textureSize); // Returns depth texture and inserts generated framebuffer to parameter GLuint createDepthTextureFrameBuffer(const QSize &size, GLuint &frameBuffer, GLuint textureSize); + void fillDepthTexture(GLuint texture, const QSize &size, GLuint textureSize, GLfloat value); #endif void deleteTexture(const GLuint *texture); |