kwin/src/plugins/blur
Vlad Zahorodnii 36960d8572 plugins/blur: Rewrite it
Given how the blur effect works, if a pixel changes, the surrounding
pixels may have to be repainted as well. Currently, it's achieved by
expanding the damage in the BlurEffect::prePaintWindow() function.
However, it means that the blur effect should see both surface and
buffer damage in the pre paint pass.

Unfortunately, after refactoring surface and buffer damage tracking,
kwin no longer provides the buffer damage in the pre paint pass (it does
so for good reasons). This broke the blur effect. As an example, you may
see visual glitches when moving the software cursor over blurred areas
of a window.

In order to fix this issue, the blur effect has to cache background
behind every window to avoid blurring already blurred areas.

This change implements a background cache. Unfortunately, since the
blur effect's code has become very difficult to change over the years,
this change rewrites the relevant parts of the blur effect.

With the proposed design, the blur effect is going to maintain cached
background for every window + offscreen render targets. It may have
issues with animated windows, however in practice, it seems to behave
good enough. However, if it becomes pressing matter, we can move from
simplistic design in this patch to somewhat more sophisticated design
that involves textures with rounded up size.

BUG: 455526
2023-08-18 13:08:48 +00:00
..
shaders plugins/blur: Rewrite it 2023-08-18 13:08:48 +00:00
blur.cpp plugins/blur: Rewrite it 2023-08-18 13:08:48 +00:00
blur.h plugins/blur: Rewrite it 2023-08-18 13:08:48 +00:00
blur.kcfg
blur.qrc plugins/blur: Rewrite it 2023-08-18 13:08:48 +00:00
blur_config.cpp Add explicit moc includes to sources for moc-covered headers 2023-07-15 08:40:49 +00:00
blur_config.h Remove unneeded QVariantList from KCM constructor args 2023-06-10 06:50:27 +02:00
blur_config.ui
blurconfig.kcfgc
CMakeLists.txt plugins/blur: Rewrite it 2023-08-18 13:08:48 +00:00
main.cpp
metadata.json