From 95bf7ebfcd7892d1f03bf34f1d2e9dc0fe9a4297 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20A=2E=20Niemel=C3=A4?= Date: Thu, 5 May 2011 10:32:43 +0300 Subject: Fix to avoid depth test when possible --- src/shadereffectitem.cpp | 22 +++++++++++++++------- src/shadereffectitem.h | 1 + 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/shadereffectitem.cpp b/src/shadereffectitem.cpp index 64b59bd..4d09327 100644 --- a/src/shadereffectitem.cpp +++ b/src/shadereffectitem.cpp @@ -211,6 +211,7 @@ ShaderEffectItem::ShaderEffectItem(QDeclarativeItem *parent) , m_checkedViewportUpdateMode(false) , m_checkedOpenGL(false) , m_mirrored(false) + , m_defaultVertexShader(true) { setFlag(QGraphicsItem::ItemHasNoContents, false); connect(this, SIGNAL(visibleChanged()), this, SLOT(handleVisibilityChange())); @@ -288,6 +289,7 @@ void ShaderEffectItem::setVertexShader(const QString &code) return; m_vertex_code = code; + m_defaultVertexShader = false; if (isComponentComplete()) { reset(); updateProperties(); @@ -423,16 +425,22 @@ void ShaderEffectItem::renderEffect(QPainter *painter, const QMatrix4x4 &matrix) bindGeometry(); - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_GREATER); - glDepthMask(true); + // Optimization, disable depth test when we know we don't need it. + if (m_defaultVertexShader) { + glDepthMask(false); + glDisable(GL_DEPTH_TEST); + } else { + glEnable(GL_DEPTH_TEST); + glDepthFunc(GL_GREATER); + glDepthMask(true); #if defined(QT_OPENGL_ES) - glClearDepthf(0); + glClearDepthf(0); #else - glClearDepth(0); + glClearDepth(0); #endif - glClearColor(0, 0, 0, 0); - glClear(GL_DEPTH_BUFFER_BIT); + glClearColor(0, 0, 0, 0); + glClear(GL_DEPTH_BUFFER_BIT); + } if (m_blending){ glEnable(GL_BLEND); diff --git a/src/shadereffectitem.h b/src/shadereffectitem.h index d1f9fd4..83fbaea 100644 --- a/src/shadereffectitem.h +++ b/src/shadereffectitem.h @@ -140,6 +140,7 @@ private: bool m_checkedViewportUpdateMode : 1; bool m_checkedOpenGL : 1; bool m_mirrored : 1; + bool m_defaultVertexShader : 1; }; QT_END_HEADER -- cgit v1.2.3