diff --git a/effects/blur/blur.cpp b/effects/blur/blur.cpp --- a/effects/blur/blur.cpp +++ b/effects/blur/blur.cpp @@ -126,16 +126,18 @@ m_renderTargets.reserve(m_downSampleIterations + 2); m_renderTextures.reserve(m_downSampleIterations + 2); + const GLenum textureFormat = GLPlatform::instance()->isGLES() ? GL_RGBA8 : GL_SRGB8_ALPHA8; + for (int i = 0; i <= m_downSampleIterations; i++) { - m_renderTextures.append(GLTexture(GL_RGBA8, effects->virtualScreenSize() / (1 << i))); + m_renderTextures.append(GLTexture(textureFormat, effects->virtualScreenSize() / (1 << i))); m_renderTextures.last().setFilter(GL_LINEAR); m_renderTextures.last().setWrapMode(GL_CLAMP_TO_EDGE); m_renderTargets.append(new GLRenderTarget(m_renderTextures.last())); } // This last set is used as a temporary helper texture - m_renderTextures.append(GLTexture(GL_RGBA8, effects->virtualScreenSize())); + m_renderTextures.append(GLTexture(textureFormat, effects->virtualScreenSize())); m_renderTextures.last().setFilter(GL_LINEAR); m_renderTextures.last().setWrapMode(GL_CLAMP_TO_EDGE); @@ -641,6 +643,8 @@ const QRegion expandedBlurRegion = expand(shape) & expand(screen); + const bool isGLES = GLPlatform::instance()->isGLES(); + // Upload geometry for the down and upsample iterations GLVertexBuffer *vbo = GLVertexBuffer::streamingBuffer(); @@ -662,10 +666,19 @@ */ if (isDock) { m_renderTargets.last()->blitFromFramebuffer(sourceRect, destRect); + + if (!isGLES) { + glEnable(GL_FRAMEBUFFER_SRGB); + } + copyScreenSampleTexture(vbo, blurRectCount, shape.translated(xTranslate, yTranslate), screenProjection); } else { m_renderTargets.first()->blitFromFramebuffer(sourceRect, destRect); + if (!isGLES) { + glEnable(GL_FRAMEBUFFER_SRGB); + } + // Remove the m_renderTargets[0] from the top of the stack that we will not use GLRenderTarget::popRenderTarget(); } @@ -689,6 +702,10 @@ upscaleRenderToScreen(vbo, blurRectCount * (m_downSampleIterations + 1), shape.rectCount() * 6, screenProjection, windowRect.topLeft()); + if (!isGLES) { + glDisable(GL_FRAMEBUFFER_SRGB); + } + if (opacity < 1.0) { glDisable(GL_BLEND); }