thorvg/src/renderer
Hermet Park 07331eb76c renderer: add partial rendering support
Partial Rendering refers to a rendering technique where
only a portion of the scene or screen is updated, rather
than redrawing the entire output. It is commonly used as
a performance optimization strategy, focusing on redrawing
only the regions that have changed, often called dirty regions.

This introduces RenderDirtyRegion, which assists
in collecting a compact dirty region from render tasks.

To efficient data-processing, this divide the screen region
with a designated size of partition and handles the partitl rendering
computation with a divide-conquer metholodgy.

Each backend can utilize this class to support efficient partial rendering.
This is implemented using a Line Sweep and Subdivision Merging O(NlogN).

The basic per-frame workflow is as follows:

0. RenderDirtyRegion::init() //set the screen size to properly partition the regions
1. RenderDirtyRegion::prepare() //Call this in Renderer::preRender().
2. RenderDirtyRegion::add() //Add all dirty paints for the frame before rendering.
3. RenderDirtyRegion::commit() //Generate the partial rendering region list before rendering.
4. RenderDirtyRegion::partition() //Get a certian partition
5. RenderDirtyRegion::get() //Retrieve the current dirty region list of a partition and use it when drawing paints.
6. RenderDirtyRegion::clear() //Reset the state.

RenderMethod introduced for 2 utilities for paritial renderings

1. RenderMethod::damage() //add a force dirty region, especially useful for scene effects
2. RenderMethod::partial() //toggle the partial rendering feature

issue: https://github.com/thorvg/thorvg/issues/1747
2025-06-23 16:04:48 +09:00
..
gl_engine renderer: add partial rendering support 2025-06-23 16:04:48 +09:00
sw_engine renderer: add partial rendering support 2025-06-23 16:04:48 +09:00
wg_engine renderer: add partial rendering support 2025-06-23 16:04:48 +09:00
meson.build renderer: migrated TrimPath as the integrated rendering method 2025-02-25 15:38:03 +09:00
tvgAccessor.cpp updated copyright 2025-01-03 14:32:31 +09:00
tvgAnimation.cpp renderer: rectify the update flag once more 2025-06-18 15:49:47 +09:00
tvgAnimation.h renderer: introduced paint reference counting 2024-11-20 01:53:25 +09:00
tvgCanvas.cpp renderer: hotfix 2025-06-18 11:05:05 +09:00
tvgCanvas.h renderer: hotfix 2025-06-18 11:05:05 +09:00
tvgCommon.h api: revise engine initialization and termination 2025-04-23 15:46:49 +09:00
tvgFill.cpp renderer: revise the pImpl design with a better efficiency 2025-04-20 00:07:50 +09:00
tvgFill.h renderer: revise the pImpl design with a better efficiency 2025-04-20 00:07:50 +09:00
tvgFrameModule.h api: revised the animation segment specification 2025-01-22 13:03:48 +09:00
tvgGlCanvas.cpp renderer/engines: redesigned RenderRegion property layout 2025-05-28 11:41:52 +09:00
tvgInitializer.cpp api: revise engine initialization and termination 2025-04-23 15:46:49 +09:00
tvgIteratorAccessor.h updated copyright 2025-01-03 14:32:31 +09:00
tvgLoader.cpp ttf: ++thread safety 2025-03-25 17:02:58 +09:00
tvgLoader.h common: ++stability of the font cache 2025-03-06 19:00:06 +09:00
tvgLoadModule.h ttf: ++thread safety 2025-03-25 17:02:58 +09:00
tvgPaint.cpp renderer: clean up the base render flow 2025-06-16 18:00:30 +09:00
tvgPaint.h renderer: add partial rendering support 2025-06-23 16:04:48 +09:00
tvgPicture.cpp renderer: revise the pImpl design with a better efficiency 2025-04-20 00:07:50 +09:00
tvgPicture.h renderer: delegate the null data handling to engines 2025-06-17 15:54:44 +09:00
tvgRender.cpp renderer: add partial rendering support 2025-06-23 16:04:48 +09:00
tvgRender.h renderer: add partial rendering support 2025-06-23 16:04:48 +09:00
tvgSaveModule.h updated copyright 2025-01-03 14:32:31 +09:00
tvgSaver.cpp common: str refactoring 2025-03-06 12:18:24 +09:00
tvgScene.cpp renderer: revise the pImpl design with a better efficiency 2025-04-20 00:07:50 +09:00
tvgScene.h renderer: add partial rendering support 2025-06-23 16:04:48 +09:00
tvgShape.cpp renderer: revise the pImpl design with a better efficiency 2025-04-20 00:07:50 +09:00
tvgShape.h renderer: delegate the null data handling to engines 2025-06-17 15:54:44 +09:00
tvgSwCanvas.cpp renderer/engines: redesigned RenderRegion property layout 2025-05-28 11:41:52 +09:00
tvgTaskScheduler.cpp common: ++loader thread safety 2025-03-24 18:18:30 +09:00
tvgTaskScheduler.h common: ++loader thread safety 2025-03-24 18:18:30 +09:00
tvgText.cpp renderer: revise the pImpl design with a better efficiency 2025-04-20 00:07:50 +09:00
tvgText.h renderer: clean up the base render flow 2025-06-16 18:00:30 +09:00
tvgWgCanvas.cpp renderer/engines: redesigned RenderRegion property layout 2025-05-28 11:41:52 +09:00