anthonyfieroni added inline comments. Restricted Application edited projects, added KWin; removed Plasma.
INLINE COMMENTS > blur.cpp:94 > delete shader; > - delete target; > + shader = NULL; > + m_simpleTarget should be deleted too > blur.cpp:96-104 > + for (int i = 0; i < renderTargets.size(); i++) { > + delete renderTargets[i]; > + renderTargets[i] = NULL; > + > + renderTextures[i].discard(); > + } > + Make a function that clears them. > blur.cpp:117 > > -void BlurEffect::updateTexture() { > - delete target; > - // Offscreen texture that's used as the target for the horizontal blur > pass > - // and the source for the vertical pass. > - tex = GLTexture(GL_RGBA8, effects->virtualScreenSize()); > - tex.setFilter(GL_LINEAR); > - tex.setWrapMode(GL_CLAMP_TO_EDGE); > +bool BlurEffect::renderTargetsValid() > +{ Make it const. > blur.cpp:119-129 > + if (renderTargets.isEmpty()) { > + return false; > + } > + > + for (int i = 0; i < renderTargets.size(); i++) { > + if (!renderTargets[i]->valid()) { > + return false; You can minimize it return !renderTargets.isEmpty() && std::find_if(renderTargets.cbegin(), renderTargets.cend(), [](const GLRenderTarget *target) { return !target->valid(); }) == renderTarget.cend(); > blur.cpp:180-188 > + for (int i = 0; i < renderTargets.size(); i++) { > + delete renderTargets[i]; > + renderTargets[i] = NULL; > + > + renderTextures[i].discard(); > + } > + Use same function from above. > blur.cpp:670-724 > + shader->bind(BlurShader::copySampleType); > + > + shader->setModelViewProjectionMatrix(screenProjection); > + shader->setTextureSize(screen.size()); > + shader->setBlurRect(shape.boundingRect().adjusted(BORDER_SIZE, > BORDER_SIZE, -BORDER_SIZE, -BORDER_SIZE), screen.size()); > + > + GLRenderTarget::pushRenderTarget(renderTargets[0]); Make a 3 function copySampleType, downSampleType, upSampleType with needed parameters. Call them here and in doCachedBlur > blur.h:83 > QRegion blurRegion(const EffectWindow *w) const; > - bool shouldBlur(const EffectWindow *w, int mask, const WindowPaintData > &data) const; > + bool shouldBlur(const EffectWindow *w, int mask, const WindowPaintData > &data); > void updateBlurRegion(EffectWindow *w) const; Still can be const. > blurshader.cpp:232-239 > if (gles) { > if (core) { > - stream << "#version 300 es\n\n"; > + streamVert << "#version 300 es\n\n"; > } > - stream << "precision highp float;\n"; > + > + streamVert << "precision highp float;\n"; > } else if (glsl_140) { QString glHeaderString; if (gles) { if (core) { glHeaderString += "#version 300 es\n\n"; } glHeaderString += "precision highp float;\n"; } else if (glsl_140) { glHeaderString += "#version 140\n\n"; } streamVert << glHeaderString; > blurshader.cpp:256-264 > + if (gles) { > + if (core) { > + streamFragDown << "#version 300 es\n\n"; > + } > + > + streamFragDown << "precision highp float;\n"; > + } else if (glsl_140) { streamFragDown << glHeaderString; > blurshader.cpp:266-271 > + streamFragDown << "uniform sampler2D texUnit;\n"; > + streamFragDown << "uniform float offset;\n"; > + streamFragDown << "uniform vec2 textureSize;\n"; > + > + if (core) > + streamFragDown << "out vec4 fragColor;\n\n"; QString glUniformString = "uniform sampler2D texUnit;\n" "uniform float offset;\n" "uniform vec2 textureSize;\n"; if (core) { glUniformString += "out vec4 fragColor;\n\n"; } streamFragDown << glUniformString; > blurshader.cpp:293-308 > if (gles) { > if (core) { > - stream2 << "#version 300 es\n\n"; > + streamFragUp << "#version 300 es\n\n"; > } > - stream2 << "precision highp float;\n"; > + > + streamFragUp << "precision highp float;\n"; > } else if (glsl_140) { streamFragUp << glHeaderString << glUniformString; > blurshader.cpp:333-348 > + if (gles) { > + if (core) { > + streamFragCopy << "#version 300 es\n\n"; > + } > + > + streamFragCopy << "precision highp float;\n"; > + } else if (glsl_140) { streamFragCopy << glHeaderString << glUniformString; REPOSITORY R108 KWin REVISION DETAIL https://phabricator.kde.org/D9848 To: anemeth, #plasma, #kwin Cc: anthonyfieroni, mart, davidedmundson, fredrik, ngraham, plasma-devel, kwin, #kwin, iodelay, bwowk, ZrenBot, progwolff, lesliezhai, ali-mohamed, hardening, jensreuterberg, abetts, sebas, apol