Removed the "fastblur" path

Summary:
Since the new blur is more efficient "fastblur" or "simpleblur" is not needed anymore for fullscreen blur.
Even my old low-end laptop from 2009 (with Intel T3300) can easily do fullscreen blur now with the new method without any hitch at all.

Reviewers: graesslin, #kwin, #plasma, #vdg, fredrik

Reviewed By: #vdg, fredrik

Subscribers: avaragic, fredrik, ngraham, plasma-devel, kwin, #kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D10181
This commit is contained in:
Alex Nemeth 2018-02-03 19:04:02 +01:00 committed by Fredrik Höglund
parent dca8023207
commit f8ff40271e
7 changed files with 1 additions and 93 deletions

View file

@ -43,12 +43,6 @@ BlurEffect::BlurEffect()
{
initConfig<BlurConfig>();
m_shader = BlurShader::create();
m_simpleShader = ShaderManager::instance()->generateShaderFromResources(ShaderTrait::MapTexture, QString(), QStringLiteral("logout-blur.frag"));
m_simpleTarget = new GLRenderTarget();
if (!m_simpleShader->isValid()) {
qCDebug(KWINEFFECTS) << "Simple blur shader failed to load";
}
initBlurStrengthValues();
reconfigure(ReconfigureAll);
@ -87,12 +81,6 @@ BlurEffect::~BlurEffect()
{
deleteFBOs();
delete m_simpleTarget;
m_simpleTarget = nullptr;
delete m_simpleShader;
m_simpleShader = nullptr;
delete m_shader;
m_shader = nullptr;
}
@ -235,8 +223,6 @@ void BlurEffect::reconfigure(ReconfigureFlags flags)
BlurConfig::self()->read();
m_useSimpleBlur = BlurConfig::useSimpleBlur();
int blurStrength = BlurConfig::blurStrength() - 1;
m_downSampleIterations = blurStrengthValues[blurStrength].iteration;
m_offset = blurStrengthValues[blurStrength].offset;
@ -564,16 +550,7 @@ void BlurEffect::drawWindow(EffectWindow *w, int mask, QRegion region, WindowPai
}
if (!shape.isEmpty()) {
if (m_useSimpleBlur &&
w->isFullScreen() &&
GLRenderTarget::blitSupported() &&
m_simpleShader->isValid() &&
!GLPlatform::instance()->supports(LimitedNPOT) &&
shape.boundingRect() == w->geometry()) {
doSimpleBlur(w, data.opacity(), data.screenProjectionMatrix());
} else {
doBlur(shape, screen, data.opacity(), data.screenProjectionMatrix(), w->isDock());
}
doBlur(shape, screen, data.opacity(), data.screenProjectionMatrix(), w->isDock());
}
}
@ -594,32 +571,6 @@ void BlurEffect::paintEffectFrame(EffectFrame *frame, QRegion region, double opa
effects->paintEffectFrame(frame, region, opacity, frameOpacity);
}
void BlurEffect::doSimpleBlur(EffectWindow *w, const float opacity, const QMatrix4x4 &screenProjection)
{
// The fragment shader uses a LOD bias of 1.75, so we need 3 mipmap levels.
GLTexture blurTexture = GLTexture(GL_RGBA8, w->size(), 3);
blurTexture.setFilter(GL_LINEAR_MIPMAP_LINEAR);
blurTexture.setWrapMode(GL_CLAMP_TO_EDGE);
m_simpleTarget->attachTexture(blurTexture);
m_simpleTarget->blitFromFramebuffer(w->geometry(), QRect(QPoint(0, 0), w->size()));
m_simpleTarget->detachTexture();
// Unmodified base image
ShaderBinder binder(m_simpleShader);
QMatrix4x4 mvp = screenProjection;
mvp.translate(w->x(), w->y());
m_simpleShader->setUniform(GLShader::ModelViewProjectionMatrix, mvp);
m_simpleShader->setUniform("u_alphaProgress", opacity);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
blurTexture.bind();
blurTexture.generateMipmaps();
blurTexture.render(infiniteRegion(), w->geometry());
blurTexture.unbind();
glDisable(GL_BLEND);
}
void BlurEffect::doBlur(const QRegion& shape, const QRect& screen, const float opacity, const QMatrix4x4 &screenProjection, bool isDock)
{
QRegion expandedBlurRegion = expand(shape) & expand(screen);

View file

@ -83,7 +83,6 @@ private:
QRegion blurRegion(const EffectWindow *w) const;
bool shouldBlur(const EffectWindow *w, int mask, const WindowPaintData &data) const;
void updateBlurRegion(EffectWindow *w) const;
void doSimpleBlur(EffectWindow *w, const float opacity, const QMatrix4x4 &screenProjection);
void doBlur(const QRegion &shape, const QRect &screen, const float opacity, const QMatrix4x4 &screenProjection, bool isDock);
void uploadRegion(QVector2D *&map, const QRegion &region, const int downSampleIterations);
void uploadGeometry(GLVertexBuffer *vbo, const QRegion &blurRegion, const QRegion &windowRegion);
@ -93,9 +92,6 @@ private:
void copyScreenSampleTexture(GLVertexBuffer *vbo, int blurRectCount, QRegion blurShape, QSize screenSize, QMatrix4x4 screenProjection);
private:
GLShader *m_simpleShader;
GLRenderTarget *m_simpleTarget;
BlurShader *m_shader;
QVector <GLRenderTarget*> m_renderTargets;
QVector <GLTexture> m_renderTextures;
@ -105,7 +101,6 @@ private:
QRegion m_damagedArea; // keeps track of the area which has been damaged (from bottom to top)
QRegion m_paintedArea; // actually painted area which is greater than m_damagedArea
QRegion m_currentBlur; // keeps track of the currently blured area of the windows(from bottom to top)
bool m_useSimpleBlur;
int m_downSampleIterations; // number of times the texture will be downsized to half size
int m_offset;

View file

@ -8,8 +8,5 @@
<entry name="BlurStrength" type="Int">
<default>10</default>
</entry>
<entry name="UseSimpleBlur" type="Bool">
<default>false</default>
</entry>
</group>
</kcfg>

View file

@ -77,16 +77,6 @@
</item>
</layout>
</item>
<item>
<widget class="QCheckBox" name="kcfg_UseSimpleBlur">
<property name="text">
<string>Use simple fullscreen blur</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">

View file

@ -1,9 +0,0 @@
uniform sampler2D sampler;
uniform float u_alphaProgress;
varying vec2 texcoord0;
void main() {
gl_FragColor = texture2D(sampler, texcoord0, 1.75);
gl_FragColor.a = u_alphaProgress;
}

View file

@ -1,14 +0,0 @@
#version 140
uniform sampler2D sampler;
uniform float u_alphaProgress;
in vec2 texcoord0;
out vec4 fragColor;
void main() {
vec4 texel = texture(sampler, texcoord0, 1.75);
texel.a = u_alphaProgress;
fragColor = texel;
}

View file

@ -6,7 +6,6 @@
<file alias="cylinder.vert">cube/data/1.10/cylinder.vert</file>
<file alias="sphere.vert">cube/data/1.10/sphere.vert</file>
<file alias="invert.frag">invert/data/1.10/invert.frag</file>
<file alias="logout-blur.frag">logout/data/1.10/logout-blur.frag</file>
<file alias="lookingglass.frag">lookingglass/data/1.10/lookingglass.frag</file>
<file alias="blinking-startup-fragment.glsl">startupfeedback/data/blinking-startup-fragment.glsl</file>
</qresource>
@ -17,7 +16,6 @@
<file alias="cylinder.vert">cube/data/1.40/cylinder.vert</file>
<file alias="sphere.vert">cube/data/1.40/sphere.vert</file>
<file alias="invert.frag">invert/data/1.40/invert.frag</file>
<file alias="logout-blur.frag">logout/data/1.40/logout-blur.frag</file>
<file alias="lookingglass.frag">lookingglass/data/1.40/lookingglass.frag</file>
</qresource>
</RCC>