https://bugs.kde.org/show_bug.cgi?id=455570
Dmitry Kazakov <dimul...@gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Latest Commit|https://invent.kde.org/grap |https://invent.kde.org/grap |hics/krita/commit/bef36adac |hics/krita/commit/2130f06ac |9ed3934c68431da838045041fa4 |829aa8bedb4f9c85956aa246e75 |a31d |ca44 --- Comment #13 from Dmitry Kazakov <dimul...@gmail.com> --- Git commit 2130f06ac829aa8bedb4f9c85956aa246e75ca44 by Dmitry Kazakov. Committed on 01/07/2022 at 09:03. Pushed by dkazakov into branch 'master'. Fix extremely slow outline rendering with fuzzy brushes If the brush is very fuzzy, then it may generate too many polygons, which would make QPainterPath::toSubpathPolygons() extremely slow (especially on Windows due to slow memory allocations). And since we call this function on every frame render it may make Krita GUI stutter a lot. To workaround this issue this patch implements a special class KisOptimizedBrushOutline. Its main purpose is to make sure that the brush outline cache is stored in already prepared format of QVector<QPolygonF>, so that we wouldn't have to convert QPainterPath into polygons on every frame generation. The class also makes sure that the original set of polygons is immutable, so no extra allocations happen while the outline is passed from the brush to the GUI rendering code. It is implemented via storing the transformation and extra paths in separate objects. M +2 -1 libs/brush/kis_auto_brush.cpp M +1 -1 libs/brush/kis_auto_brush.h M +5 -4 libs/brush/kis_brush.cpp M +2 -1 libs/brush/kis_brush.h M +2 -2 libs/brush/kis_imagepipe_brush.cpp M +1 -1 libs/brush/kis_imagepipe_brush.h M +1 -0 libs/image/CMakeLists.txt A +135 -0 libs/image/brushengine/KisOptimizedBrushOutline.cpp * A +110 -0 libs/image/brushengine/KisOptimizedBrushOutline.h * M +4 -3 libs/image/brushengine/kis_paintop_settings.cpp M +3 -2 libs/image/brushengine/kis_paintop_settings.h M +4 -4 libs/ui/opengl/KisOpenGLCanvasRenderer.cpp M +2 -1 libs/ui/opengl/KisOpenGLCanvasRenderer.h M +1 -1 libs/ui/opengl/kis_opengl_canvas2.cpp M +2 -1 libs/ui/opengl/kis_opengl_canvas2.h M +15 -2 libs/ui/tool/kis_tool.cc M +4 -1 libs/ui/tool/kis_tool.h M +3 -2 libs/ui/tool/kis_tool_freehand.cc M +3 -3 libs/ui/tool/kis_tool_freehand.h M +6 -5 libs/ui/tool/kis_tool_freehand_helper.cpp M +4 -4 libs/ui/tool/kis_tool_freehand_helper.h M +17 -11 libs/ui/tool/kis_tool_paint.cc M +6 -5 libs/ui/tool/kis_tool_paint.h M +12 -7 plugins/paintops/defaultpaintops/duplicate/kis_duplicateop_settings.cpp M +1 -1 plugins/paintops/defaultpaintops/duplicate/kis_duplicateop_settings.h M +3 -2 plugins/paintops/deform/kis_deform_paintop_settings.cpp M +1 -1 plugins/paintops/deform/kis_deform_paintop_settings.h M +3 -1 plugins/paintops/experiment/kis_experiment_paintop_settings.cpp M +1 -1 plugins/paintops/experiment/kis_experiment_paintop_settings.h M +5 -4 plugins/paintops/gridbrush/kis_grid_paintop_settings.cpp M +1 -1 plugins/paintops/gridbrush/kis_grid_paintop_settings.h M +2 -1 plugins/paintops/hairy/kis_hairy_paintop_settings.cpp M +1 -1 plugins/paintops/hairy/kis_hairy_paintop_settings.h M +5 -4 plugins/paintops/libpaintop/kis_brush_based_paintop_settings.cpp M +2 -2 plugins/paintops/libpaintop/kis_brush_based_paintop_settings.h M +3 -9 plugins/paintops/libpaintop/kis_current_outline_fetcher.cpp M +10 -8 plugins/paintops/libpaintop/kis_current_outline_fetcher.h M +3 -3 plugins/paintops/mypaint/MyPaintPaintOpSettings.cpp M +1 -1 plugins/paintops/mypaint/MyPaintPaintOpSettings.h M +3 -3 plugins/paintops/roundmarker/kis_roundmarkerop_settings.cpp M +1 -1 plugins/paintops/roundmarker/kis_roundmarkerop_settings.h M +4 -4 plugins/paintops/sketch/kis_sketch_paintop_settings.cpp M +1 -1 plugins/paintops/sketch/kis_sketch_paintop_settings.h M +3 -2 plugins/paintops/spray/kis_spray_paintop_settings.cpp M +1 -1 plugins/paintops/spray/kis_spray_paintop_settings.h M +1 -0 plugins/tools/basictools/kis_tool_move.cc M +1 -1 plugins/tools/selectiontools/KisToolSelectMagnetic.cc M +1 -0 plugins/tools/selectiontools/kis_tool_select_path.cc M +4 -4 plugins/tools/tool_enclose_and_fill/subtools/KisToolBasicBrushBase.cpp M +1 -1 plugins/tools/tool_enclose_and_fill/subtools/KisToolBasicBrushBase.h M +1 -0 plugins/tools/tool_transform2/kis_tool_transform.cc The files marked with a * at the end have a non valid license. Please read: https://community.kde.org/Policies/Licensing_Policy and use the headers which are listed at that page. https://invent.kde.org/graphics/krita/commit/2130f06ac829aa8bedb4f9c85956aa246e75ca44 -- You are receiving this mail because: You are watching all bug changes.