Bug 491447 - liquify + filter layers cause layers to not be loaded
Summary: liquify + filter layers cause layers to not be loaded
Status: RESOLVED FIXED
Alias: None
Product: krita
Classification: Applications
Component: Layer Stack (other bugs)
Version First Reported In: 5.2.3
Platform: Microsoft Windows Microsoft Windows
: NOR normal
Target Milestone: ---
Assignee: Krita Bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2024-08-08 19:20 UTC by yuvalabc
Modified: 2024-11-07 14:55 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed/Implemented In:
Sentry Crash Report:


Attachments
minimal file that demonstrates this bug (634.35 KB, application/x-krita)
2024-08-08 19:20 UTC, yuvalabc
Details

Note You need to log in before you can comment on or make changes to this bug.
Description yuvalabc 2024-08-08 19:20:09 UTC
Created attachment 172409 [details]
minimal file that demonstrates this bug

SUMMARY
there is a weird caching thing where if a liquify transform layer applies to a layer setup using filter layers, the whole stack does not load on startup. you need to manually hide and unhide some layers deep down within the hierarchy to trigger krita to recalculate the whole thing and display any image.

STEPS TO REPRODUCE
1. have a file with a liquify transform layer applying to a layer with a filter mask of sorts (potentially other such cases, but this is the simplest case i could find)
2. open the file

OBSERVED RESULT:
nothing shows, even when i hide the liquify layer. only when i hide and unhide the filter mask, then krita updates that layer.

EXPECTED RESULT:
after waiting for the liquify layer to apply, i'd see the image.
alternatively, if i hide the liquify layer i'd expect to see the original paint layer with the filter mask applied to it, as that should cancel the processing of the liquify layer

ADDITIONAL INFORMATION:
i have many projects with dozens of layers and liquify transform layers for non-destructive editing.
this bug was introduced seemingly recently, as i remember this not being the case. now working with any of my project files is incredibly cumbersome, i have to hunt down in the layer stack for single layers very deep within the groups, to trigger krita to update the whole thing.
Comment 1 Halla Rempt 2024-10-29 12:01:48 UTC
I can confirm that the result only shows, and partially, when the liquify layer is clicked.
Comment 2 Dmitry Kazakov 2024-11-07 14:55:42 UTC
Git commit 75a084ca7e904e1fabfd556f617c32acda1e514c by Dmitry Kazakov.
Committed on 07/11/2024 at 14:55.
Pushed by dkazakov into branch 'master'.

Implement KisAbstractProjectionPlane::looseUserVisibleBounds()

The function does almost exactly the same thing that tightUserVisibleBounds()
does, but uses extent() instead of exactBounds() of the source layer as a base
for the calculation. It makes it possible to use this method in hot places, like
change/needRect calculation the transform masks.

The patch fixes two bugs:

1) needRect of a group layer is not nullified by a transform mask attached to a group.
After loading the layer, the group's original is empty, so we cannot use
node->original()->extent() as an interestRect for the non-affine transforms.

2) When calculating KisGroupLayer::extent() in pass-though mode we should use
tight/looseUserVisibleBounds() on the children to make sure the layer styles' state
is taken into account. Otherwise, changing visibility of a pass-through group containing
a layer with layer styles will cause artifacts on the canvas.

M  +5    -0    libs/image/kis_abstract_projection_plane.cpp
M  +11   -0    libs/image/kis_abstract_projection_plane.h
M  +19   -5    libs/image/kis_group_layer.cc
M  +3    -0    libs/image/kis_group_layer.h
M  +13   -2    libs/image/kis_layer.cc
M  +11   -0    libs/image/kis_layer.h
M  +5    -0    libs/image/kis_layer_projection_plane.cpp
M  +1    -0    libs/image/kis_layer_projection_plane.h
M  +7    -0    libs/image/kis_mask_projection_plane.cpp
M  +1    -0    libs/image/kis_mask_projection_plane.h
M  +17   -5    libs/image/kis_transform_mask.cpp
M  +9    -0    libs/image/layerstyles/kis_layer_style_filter_projection_plane.cpp
M  +1    -0    libs/image/layerstyles/kis_layer_style_filter_projection_plane.h
M  +12   -0    libs/image/layerstyles/kis_layer_style_projection_plane.cpp
M  +1    -0    libs/image/layerstyles/kis_layer_style_projection_plane.h

https://invent.kde.org/graphics/krita/-/commit/75a084ca7e904e1fabfd556f617c32acda1e514c