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.
I can confirm that the result only shows, and partially, when the liquify layer is clicked.
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