diff options
Diffstat (limited to 'src/shadereffectitem.cpp')
-rw-r--r-- | src/shadereffectitem.cpp | 22 |
1 files changed, 15 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); |