summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/shadereffectitem.cpp22
-rw-r--r--src/shadereffectitem.h1
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