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/2130f06ac |hics/krita/commit/f58beab32 |829aa8bedb4f9c85956aa246e75 |9ecc38e2c2472bf69bc5a43bafe |ca44 |7e57 --- Comment #14 from Dmitry Kazakov <dimul...@gmail.com> --- Git commit f58beab329ecc38e2c2472bf69bc5a43bafe7e57 by Dmitry Kazakov. Committed on 01/07/2022 at 09:04. Pushed by dkazakov into branch 'krita/5.1'. 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/f58beab329ecc38e2c2472bf69bc5a43bafe7e57 -- You are receiving this mail because: You are watching all bug changes.