Skip to content

Releases: thorvg/thorvg

ThorVG 1.0.0-pre26

14 Aug 16:11

Choose a tag to compare

ThorVG 1.0.0-pre26 Pre-release
Pre-release

This release enhances rendering stability, introduces HSL blending modes, and improves Lottie compliance. It also optimizes the Web build with reduced bundle size and better TypeScript support, while fixing Windows build issues in the infrastructure.

🔧 Core

  • Added a new API to control the visibility of Paint objects.
  • Improved stability for partial rendering behavior. #3679, #3696
  • Fixed incorrect clipping logic in fast-track rendering paths.
  • Refined AABB/OBB bounding box behavior to more accurately include stroke regions in size calculations.

🚀 Engines

  • [wgpu, gl/es] Fixed incorrect Gaussian blur border clamping. #3677
  • [wgpu, gl/es] Added support for HSL-based blend modes: Hue, Saturation, Color, and Luminosity. #2701
  • [gl/es] Adjusted blending logic to align with web standards. #3072
  • [cpu] Improved multi-threaded clipping stability through proper synchronization.
  • [cpu] Ensured rendering updates are triggered only when opacity changes occur.

✨Lottie

  • Fixed loop() expression behavior. #3652
  • Aligned with Lottie spec: skipped time stretch when time remap is defined. #3591

🖼️ GIF

  • Fixed minor memory leaks of background paints.

🌐 Web

  • Reduced WASM bundle size by omitting default TTF font data when the TTF loader is disabled. #3481
  • Enabled closure optimization, reducing JavaScript code size by up to ~45%.
  • Improved TypeScript compatibility by explicitly defining data types. thorvg.web#16

🛠️ Infra

  • Fixed compilation issues on Windows when building ThorVG as a subproject using static libraries.

🧩 API Updates

  • C++ API
+ Result Paint::visible(bool on)
+ bool Paint::visible()
  • C API
+ Tvg_Result tvg_paint_set_visible(Tvg_Paint* paint, bool visible)
+ bool tvg_paint_get_visible(const Tvg_Paint* paint)

✅ Additional Notes

  • Please note that the improvements to the bounds() APIs for AABB/OBB are currently applied only to the software engine. The GL and WebGPU engines still use the legacy behavior.

Full Changelog: v1.0-pre25...v1.0-pre26

ThorVG 1.0.0-pre25

31 Jul 15:26

Choose a tag to compare

ThorVG 1.0.0-pre25 Pre-release
Pre-release

This release improves stroke rendering quality and performance, adds new blend mode support across CPU and GPU engines, and enhances SVG and hit detection accuracy. Web compliance and effect duplication are now properly handled. Notable optimizations include a 5–25% FPS boost in the WGPU engine.

🔧 Core

  • Improved bounding box calculation to properly account for stroke scalability.
  • Ensured correct duplication of paint effects. (#3631)
  • Added support for region-based hit detection.

🚀 Engines

  • [cpu] Added support for Hue, Color, Saturation, and Luminosity blend modes. (#2701)
  • [wgpu] Optimized the stroke tessellator, improving FPS by approximately 5–25%. (#3557)
  • [wgpu] Enhanced the quality of stroke round joins. (#3288)
  • [wgpu] Improved the visual quality of stroke dashes. (#3273)
  • [wgpu] Revised blending functions to align with web standards. (#3072)
  • [wgpu, gl/es] Introduced support for the Composition blend mode. (#3621)
  • [wgpu, gl/es] Fixed handling of zero-size blur DropShadow. (#3602)

🖼️ SVG

  • Fixed issues with nested node handling. (#3615)

🧩 API Updates

  • C++ API
+BlendMethod::Composition
+bool Paint::intersects(int32_t x, int32_t y, int32_t w, int32_t h)
  • C API
+Tvg_Blend_Method::TVG_BLEND_METHOD_COMPOSITION
+bool tvg_paint_intersects(Tvg_Paint* paint, int32_t x, int32_t y, int32_t w, int32_t h)

Full Changelog: v1.0-pre25...v1.0-pre25

ThorVG v0.15.14

23 Jul 07:15

Choose a tag to compare

This release includes several improvements and minor bug fixes:

🔧 Core

  • Corrected an incorrect fill rule option in text rendering.
  • Fixed incorrect calculation in multiple mask applications. #3600
  • Improved radial gradient handling to conform with SVG 1.1 and address edge cases.

🚀 Engines

  • [cpu] Improved the DropShadow effect stability
  • [cpu] Updated the SoftLight blending equation to align with the W3C specification.
  • [cpu] Added proper support for zero-size blur in DropShadow effects. #3602
  • [cpu] Revised texture clipping logic to correctly support shapes with inner corners. #3520
  • [cpu] Fixed an issue where lines were missing when a picture was rotated 90 degrees. #3452
  • [gl/es] Fixed broken clipping behavior. #3448

✨Lottie

  • Increased the quality level of GaussianBlur and DropShadow from low to medium.
  • Adjusted DropShadow distance to match Adobe After Effects behavior.
  • Fixed missing offset corners when using miter joins.
  • Ensured proper star/polygon closure to prevent artifacts from inaccurate point comparisons.
  • Corrected an issue causing inaccurate opacity when using the Repeater property.
  • Fixed a specification mismatch when a null layer was applied to layer masking.

🌀 Svg

  • Fix the nested use nodes #3615

✅ Additional Notes

Removed Lena resources previously used in ThorVG. #3499

Full Changelog: v0.15.13...v0.15.14

ThorVG 1.0.0-pre24

17 Jul 13:36

Choose a tag to compare

ThorVG 1.0.0-pre24 Pre-release
Pre-release

This release brings improved rendering quality, refined visual effects, and better Lottie compatibility. Updates to effects like Tritone, DropShadow, and SoftLight ensure more accurate behavior across platforms. Key adjustments were also made to better match Adobe After Effects, while internal engine tweaks enhance overall stability and performance.

🔧 Core

  • Introduced a blending factor parameter for the Tritone effect.
  • Fixed incorrect calculation in multiple mask applications. #3600
  • Corrected an incorrect fill rule option in text rendering.
  • Improved support for blending methods in the Picture instance.

🚀 Engines

  • [cpu] Fixed a regression in partial rendering that omitted updates for zero opacity. #3570
  • [cpu] Updated the SoftLight blending equation to align with the W3C specification.
  • [cpu] Corrected blending pre-multiplication behavior to improve rendering quality. #1944
  • [cpu] Added proper support for zero-size blur in DropShadow effects. #3602
  • [gl/es] Fixed incorrect alpha multiplication in Tint and Tritone effects.
  • [wgpu] Fixed incorrect alpha multiplication in Tint and Tritone effects.

✨Lottie

  • Increased the quality level of Gaussian Blur and DropShadow from low to medium.
  • Adjusted DropShadow distance to match Adobe After Effects behavior.
  • Added proper support for the blending property in the Tritone layer effect.

🧩 API Updates

  • C++ API
* Result Shape::fill(FillRule r)
  -> Result Shape::fillRule(FillRule r)
  • C API
+ Tvg_Result tvg_scene_reset_effects(Tvg_Paint* scene)
+ Tvg_Result tvg_scene_push_effect_gaussian_blur(Tvg_Paint* scene, double sigma, int direction, int border, int quality)
+ Tvg_Result tvg_scene_push_effect_drop_shadow(Tvg_Paint* scene, int r, int g, int b, int a, double angle, double distance, double sigma, int quality)
+ Tvg_Result tvg_scene_push_effect_fill(Tvg_Paint* scene, int r, int g, int b, int a)
+ Tvg_Result tvg_scene_push_effect_tint(Tvg_Paint* scene, int black_r, int black_g, int black_b, int white_r, int white_g, int white_b, double intensity)
+ Tvg_Result tvg_scene_push_effect_tritone(Tvg_Paint* scene, int shadow_r, int shadow_g, int shadow_b, int midtone_r, int midtone_g, int midtone_b, int highlight_r, int highlight_g, int highlight_b, int blend);

Full Changelog: v1.0-pre23...v1.0-pre24

ThorVG 1.0.0-pre23

03 Jul 15:11

Choose a tag to compare

ThorVG 1.0.0-pre23 Pre-release
Pre-release

In this release, the partial rendering feature has been added. Since this includes a major internal change along with the new functionality, a dedicated build option is provided to enable or disable it. Please check Additional Notes.

🔧 Renderer & Engines

  • [renderer] Refined condition checks to better determine when to bypass picture composition acceleration.
  • [renderer] Revised paint render update flags for more accurate conditional rendering.
  • [renderer] Enhanced dash pattern handling with support for zero-size dashes. #3205
  • [renderer] Improved radial gradient handling to conform with SVG 1.1 and address edge cases.
  • [software] Fixed a potential memory violation when drawing images partially or entirely off-screen.
  • [software] Added partial rendering support. #1747
  • [software] Fixed an AVX/NEON regression caused by double RLE span increments. #3547
  • [software] Minor clipping performance improvements via faster region access.
  • [software] Adjusted blending operations to better match intended behavior. #3072
  • [wgpu] Skipped forced texture flushes, improving rendering performance by approximately 10%.
  • [gl/es] Fixed broken clipping behavior. #3448

🌀 Lottie

  • [lottie] Fixed missing offset corners when using miter joins.
  • [lottie] Ensured proper star/polygon closure to prevent artifacts from inaccurate point comparisons.
  • [lottie] Improved blending by adding group-level support. #1944
  • [lottie] Resolved excessive memory usage at the masking feature usage.

🧩 API Updates

  • C++ API
* Result Canvas::update(Paint* paint) 
  -> Result Canvas::update()
* uint8_t Paint::unref()
  -> uint16_t Paint::ref()
* uint8_t Paint::ref()
  -> uint16_t Paint::unref()
* uint8_t Paint::refCnt()
  -> uint16_t Paint::refCnt()
  • C API
- tvg_canvas_update_paint()
* uint8_t tvg_paint_ref(...)
  -> uint16_t tvg_paint_ref(...)
* uint8_t tvg_paint_unref(...)
  -> uint16_t tvg_paint_unref(...)
* uint8_t tvg_paint_get_ref(...)
  -> uint16_t tvg_paint_get_ref(...)

✅ Additional Notes

  • [infra] Switched to using Meson-provided build summaries.
  • [infra] Added -Dpartial={true/false} Meson option to toggle partial rendering support.
  • In this release, partial rendering has been applied only to the software engine. To use partial rendering, paint objects must be retained within the canvas, and the buffer clear operation should be skipped during the draw call Result Canvas::draw(bool clear = false).

Full Changelog: v1.0-pre22...v1.0-pre23

ThorVG 1.0.0-pre22

12 Jun 15:22

Choose a tag to compare

ThorVG 1.0.0-pre22 Pre-release
Pre-release

As we move closer to the ThorVG 1.0.0 milestone, this pre-release represents another significant step toward stabilization and refinement. Please review the release notes carefully, as this version includes behavior corrections, robustness improvements, and various internal fixes across multiple modules.

🔧 Renderer & Engines

  • [software] Improved stability by addressing a potential RLE clipping memory overflow issue.
  • [software] Fixed an issue where lines were missing when a picture was rotated 90 degrees. #3452
  • [software] Improved general texture mapping performance by up to ~15%.
  • [software] Revised texture clipping logic to correctly support shapes with inner corners. #3520
  • [gl/es] Fixed a memory leak triggered by target resizing. #3210
  • [gl/es] Corrected the Canvas buffer clear behavior to properly reflect user intent.
  • [wgpu] Achieved significant performance optimization by reducing internal context-switching overhead, and improving memory efficiency with the uniform stage buffers.

🌀 Lottie

  • [lottie] Fixed a bug in pre-composition masking behavior.
  • [lottie] Corrected an issue causing inaccurate opacity when using the Repeater property.
  • [lottie] Fixed a specification mismatch when a null layer was applied to layer masking.

🧩 API Updates

  • C++ API
+ Shape* Paint::clip()
* Result Paint::clip(Paint* clipper) 
  -> Result Paint::clip(Shape* clipper)
  • C API
+ Tvg_Paint* tvg_paint_get_clip(const Tvg_Paint* paint)
* Tvg_Result tvg_paint_clip(Tvg_Paint* paint, Tvg_Paint* clipper) 
  -> Tvg_Result tvg_paint_set_clip(Tvg_Paint* paint, Tvg_Paint* clipper);

✅ Additional Notes

  • Removed all Lena resources previously used in ThorVG. #3499

Full Changelog: v1.0-pre21...v1.0-pre22

ThorVG v0.15.13

24 May 05:36

Choose a tag to compare

This release includes several improvements and minor bug fixes:

🔧 Renderer & Engines

  • [renderer] Fixed an issue with clipping updates. #3403
  • [software] Fixed a memory allocation issue for spans that could potentially cause a buffer underrun. #3461

🌀 Lottie

  • Removed an undesired Text embedded option that was unintentionally included, simplifying configuration. thorvg/thorvg.swift#6
  • Correctly handle time remapping when the value is zero.
  • Resolved incorrect point generation for polygons with rounded corners. #2629
  • Fixed a parsing issue with separately defined transform coordinates.
  • Corrected improper overrides for Text RangeSelector fill color, stroke color, and stroke width.

🖼️ SVG

  • Fixed an issue where tags were incorrectly registered under closed gradient definitions. #3469
  • Fixed clipping issues involving and nodes. #3392

🌍 Portability

  • Clarified variable scopes to improve platform compatibility. godot#105093

✅ Additional Notes

  • Improved internal safety of the loaders

Full Changelog: v0.15.12...v0.15.13

ThorVG 1.0.0-pre21

22 May 14:47

Choose a tag to compare

ThorVG 1.0.0-pre21 Pre-release
Pre-release

As we move closer to the ThorVG 1.0.0 milestone, this pre-release marks another important step toward stabilization and refinement. Please review the release notes carefully, as this version includes behavior corrections, robustness improvements, and internal fixes across modules.

🔧 Renderer & Engines

  • [renderer] Improved internal safety across rendering engines.
  • [software] Fixed memory allocation issue for spans that could cause buffer underruns. #3461

🌀 Lottie

  • Added support for firstMargin < 0 in text-follow-path scenarios, improving compatibility with advanced text layouts.
  • Removed an undesired Text embedded option that was unintentionally included, simplifying configuration. thorvg/thorvg.swift#6
  • Correctly handle time remapping when the value is zero.
  • Resolved incorrect point generation for polygons with rounded corners. #2629

🖼️ SVG

  • Fixed an issue where tags were incorrectly registered under closed gradient definitions. #3469

Full Changelog: v1.0-pre20...v1.0-pre21

ThorVG 1.0.0-pre20

08 May 14:59

Choose a tag to compare

ThorVG 1.0.0-pre20 Pre-release
Pre-release

As we move closer to the ThorVG 1.0.0 milestone, this pre-release marks a critical step toward final stabilization. Please review these release notes carefully, as API/ABI changes are included. This version also brings numerous enhancements and bug fixes since v1.0.0-pre19.

🔧 Renderer & Engines

  • [renderer] Optimized internal memory layout for improved performance. #3214
  • [renderer] Fixed an issue with clipping updates. #3403
  • [software] Improved full-opaque color accuracy when handling PNG pre-multiplication.
  • [gl/es] Added support for DropShadow effects. #3054
  • [gl/es] Enabled dynamic linking support for OpenGL/OpenGL ES. #2453
  • [wgpu] Corrected DropShadow alpha premultiplication.
  • [wgpu] Updated compatibility with wgpu_native v22. #2909
  • [wgpu] Fixed an issue with target texture updates not applying correctly.

🌀 Lottie

  • Corrected incorrect Stroke Join values for Offset Path.
  • Properly handles delimiter (\3) in Lottie Text strings.
  • Fixed a parsing issue with separately defined transform coordinates.

🖼️ SVG

  • Fixed clipping issues involving <use> and <symbol> nodes. #3392

🌍 Portability

  • Clarified variable scopes to improve platform compatibility. godot#105093
  • Fixed compilation/linking issues related to LottieAnimation destructors in thorvg_lottie.h.

🧩 API/ABI Changes

C++ API

- Result Initializer::init(uint32_t threads, CanvasEngine engine)
+ Result Initializer::init(uint32_t threads)
- Result Initializer::term(CanvasEngine engine)
+ Result Initializer::term()

C API

- Tvg_Result tvg_engine_init(Tvg_Engine engine_method, unsigned threads)
+ Tvg_Result tvg_engine_init(unsigned threads);
- Tvg_Result tvg_engine_term(Tvg_Engine engine_method)
+ Tvg_Result tvg_engine_term()

+ Tvg_Mask_Method::TVG_MASK_METHOD_ADD
+ Tvg_Mask_Method::TVG_MASK_METHOD_SUBTRACT
+ Tvg_Mask_Method::TVG_MASK_METHOD_INTERSECT
+ Tvg_Mask_Method::TVG_MASK_METHOD_DIFFERENCE
+ Tvg_Mask_Method::TVG_MASK_METHOD_LIGHTEN
+ Tvg_Mask_Method::TVG_MASK_METHOD_DARKEN

🛠️ Infrastructure

ThorVG now supports dynamic OpenGL/OpenGL ES linking and changed our build configuration to specify the opengl variants explicitly by users. To use a specific GL variant during build:

# For OpenGL
meson setup build -Dengines="gl"

# For OpenGL ES
meson setup build -Dengines="gl" -Dextra="opengl_es"

✅ Additional Notes

Several minor bugs and regressions were also resolved as part of this release.

Full Changelog: v1.0-pre19...v1.0-pre20

ThorVG 1.0.0-pre19

10 Apr 13:28

Choose a tag to compare

ThorVG 1.0.0-pre19 Pre-release
Pre-release

In preparation for the ThorVG 1.0.0 release, we are conducting a pre-release for ThorVG v1.0. Please carefully review the release notes, as there may be API/ABI breaks included. Also, this release includes several improvements and minor bug fixes since v1.0.0-pre18.

  • [Lottie] Added support for wiggle and temporalWiggle expressions. #1640
  • [Lottie] Fixed incorrect Stroke Join and Cap value assignments.
  • [Lottie] Corrected improper overrides for Text RangeSelector fill color, stroke color, and stroke width.
  • [Lottie] Introduced support for Custom Layer Effects. #3115
  • [Lottie] Resolved a regression issue affecting Inverse Matte handling during main development. #3375 #3380 #3381 #3382
  • [Lottie] Improved stability for Follow TextPath functionality.
  • [Renderer] Enhanced thread safety for better stability.
  • [Renderer] Fixed incorrect AABB (Axis-Aligned Bounding Box) calculations for transformed scenes.
  • [GlEngine] Added support for Gaussian Blur as a post-processing effect. #3054
  • [GlEngine] Added support for Fill, Tint, and Tritone post-processing effects. #3054

Please note that ThorVG renamed tool executables with the tvg prefix for preventing name collision. #3367

Full Changelog: v1.0-pre18...v1.0-pre19