summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@digia.com>2014-06-26 15:53:21 +0200
committerLaszlo Agocs <laszlo.agocs@digia.com>2014-06-27 09:47:22 +0200
commit302687f21c99643a2dd1930a19fde66ba725661e (patch)
tree0ecea801a8746dfb86ebb7517ebc8e12ef7b787c
parent9576028934cbd3261345e944b55dd2e6ca1c62b8 (diff)
Avoid direct GL calls in Quick1
Change-Id: I72c78f3c2920d7c27c013eaad39259a7c7009940 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
-rw-r--r--src/imports/shaders/shadereffectitem.cpp35
-rw-r--r--src/imports/shaders/shadereffectsource.cpp19
2 files changed, 26 insertions, 28 deletions
diff --git a/src/imports/shaders/shadereffectitem.cpp b/src/imports/shaders/shadereffectitem.cpp
index 73c3d39d..a59d371b 100644
--- a/src/imports/shaders/shadereffectitem.cpp
+++ b/src/imports/shaders/shadereffectitem.cpp
@@ -437,36 +437,33 @@ void ShaderEffectItem::renderEffect(QPainter *painter, const QMatrix4x4 &matrix)
bindGeometry();
// Optimization, disable depth test when we know we don't need it.
+ QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
if (m_defaultVertexShader) {
- glDepthMask(false);
- glDisable(GL_DEPTH_TEST);
+ f->glDepthMask(false);
+ f->glDisable(GL_DEPTH_TEST);
} else {
- glEnable(GL_DEPTH_TEST);
- glDepthFunc(GL_GREATER);
- glDepthMask(true);
-#if defined(QT_OPENGL_ES)
- glClearDepthf(0);
-#else
- glClearDepth(0);
-#endif
- glClearColor(0, 0, 0, 0);
- glClear(GL_DEPTH_BUFFER_BIT);
+ f->glEnable(GL_DEPTH_TEST);
+ f->glDepthFunc(GL_GREATER);
+ f->glDepthMask(true);
+ f->glClearDepthf(0);
+ f->glClearColor(0, 0, 0, 0);
+ f->glClear(GL_DEPTH_BUFFER_BIT);
}
if (m_blending){
- glEnable(GL_BLEND);
- glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
+ f->glEnable(GL_BLEND);
+ f->glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
} else {
- glDisable(GL_BLEND);
+ f->glDisable(GL_BLEND);
}
if (m_geometry.indexCount())
- glDrawElements(m_geometry.drawingMode(), m_geometry.indexCount(), m_geometry.indexType(), m_geometry.indexData());
+ f->glDrawElements(m_geometry.drawingMode(), m_geometry.indexCount(), m_geometry.indexType(), m_geometry.indexData());
else
- glDrawArrays(m_geometry.drawingMode(), 0, m_geometry.vertexCount());
+ f->glDrawArrays(m_geometry.drawingMode(), 0, m_geometry.vertexCount());
- glDepthMask(false);
- glDisable(GL_DEPTH_TEST);
+ f->glDepthMask(false);
+ f->glDisable(GL_DEPTH_TEST);
for (int i = 0; i < m_attributeNames.size(); ++i)
m_program->disableAttributeArray(m_geometry.attributes()[i].position);
diff --git a/src/imports/shaders/shadereffectsource.cpp b/src/imports/shaders/shadereffectsource.cpp
index f58b5464..fa71b4bb 100644
--- a/src/imports/shaders/shadereffectsource.cpp
+++ b/src/imports/shaders/shadereffectsource.cpp
@@ -284,23 +284,24 @@ void ShaderEffectSource::bind()
GLuint hwrap = (m_wrapMode == Repeat || m_wrapMode == RepeatHorizontally) ? GL_REPEAT : GL_CLAMP_TO_EDGE;
GLuint vwrap = (m_wrapMode == Repeat || m_wrapMode == RepeatVertically) ? GL_REPEAT : GL_CLAMP_TO_EDGE;
-#if !defined(QT_OPENGL_ES_2)
- glEnable(GL_TEXTURE_2D);
-#endif
+ QOpenGLContext *context = QOpenGLContext::currentContext();
+ QOpenGLFunctions *f = context->functions();
+ if (!context->isOpenGLES())
+ f->glEnable(GL_TEXTURE_2D);
if (m_fbo && m_fbo->isValid()) {
- glBindTexture(GL_TEXTURE_2D, m_fbo->texture());
+ f->glBindTexture(GL_TEXTURE_2D, m_fbo->texture());
} else {
m_dirtyTexture = true;
emit repaintRequired();
markSourceItemDirty();
- glBindTexture(GL_TEXTURE_2D, 0);
+ f->glBindTexture(GL_TEXTURE_2D, 0);
}
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filtering);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, smooth() ? GL_LINEAR : GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, hwrap);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, vwrap);
+ f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filtering);
+ f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, smooth() ? GL_LINEAR : GL_NEAREST);
+ f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, hwrap);
+ f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, vwrap);
}
void ShaderEffectSource::refFromEffectItem()