diff options
author | Laszlo Agocs <laszlo.agocs@digia.com> | 2014-06-26 15:53:21 +0200 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@digia.com> | 2014-06-27 09:47:22 +0200 |
commit | 302687f21c99643a2dd1930a19fde66ba725661e (patch) | |
tree | 0ecea801a8746dfb86ebb7517ebc8e12ef7b787c | |
parent | 9576028934cbd3261345e944b55dd2e6ca1c62b8 (diff) | |
download | qtquick1-302687f21c99643a2dd1930a19fde66ba725661e.tar.gz |
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.cpp | 35 | ||||
-rw-r--r-- | src/imports/shaders/shadereffectsource.cpp | 19 |
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() |