From 302687f21c99643a2dd1930a19fde66ba725661e Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Thu, 26 Jun 2014 15:53:21 +0200 Subject: Avoid direct GL calls in Quick1 Change-Id: I72c78f3c2920d7c27c013eaad39259a7c7009940 Reviewed-by: Friedemann Kleint Reviewed-by: Gunnar Sletta --- src/imports/shaders/shadereffectitem.cpp | 35 ++++++++++++++---------------- src/imports/shaders/shadereffectsource.cpp | 19 ++++++++-------- 2 files changed, 26 insertions(+), 28 deletions(-) (limited to 'src/imports') 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() -- cgit v1.2.3