This release delivers broad rendering performance improvements across the CPU, OpenGL, and WebGPU engines. CPU image downscaling is now accelerated with AVX and NEON, raster operations have been parallelized, and redundant path copying has been eliminated. The GPU backends also reduce rendering overhead through improved batching, streamlined geometry processing, fewer buffer uploads, and reduced pipeline state changes.
Lottie support has been expanded with additional slot-overridable properties, master volume controls, and more reliable audio playback. This release also adds SVG rgba() color support, CID-keyed CFF font support, and direct grayscale image rendering, along with important fixes for clipping, gradients, alpha premultiplication, partial rendering, malformed JPEG input, and clip/mask lifetime management.
🚀 Engines
- [core] Reported
NonSupportwhen SFNT loaders or file I/O are disabled. #4670 - [core] Optimized animation updates by propagating changes without invalidating all child render data. #4580
- [core] Fixed trim paths losing their initial
moveTo()command during wrap-around, which could cause rendering artifacts. #4800 - [core] Fixed dangling parent pointers in clip and mask relationships.
- [cpu] Improved the thread safety of texture-mapping operations.
- [cpu] Fixed flickering during partial rendering. #4566
- [cpu] Added direct rendering support for grayscale images. #4716
- [cpu] Optimized RLE clipping complexity from
O(N×M)toO(N+M). - [cpu] Added OpenMP support for image scaling, improving performance by up to ~
2x. - [cpu] Fine-tuned non-alpha image scaling, improving rasterization performance by ~
3%. - [cpu] Corrected the anti-aliasing quality of repeating gradients. #4688
- [cpu] Improved the robustness of 8-bit gradient rasterization.
- [cpu] Added NEON and AVX implementations for image downscaling, improving performance by up to ~
35%. #30 - [cpu] Streamlined internal path processing by eliminating a redundant path-copying stage. #3100
- [gpu] Reduced repeated-image rendering overhead, improving performance by more than
2xin applicable scenarios. - [gpu] Corrected premultiplied-alpha anti-aliasing artifacts. #4041
- [gl/es] Added support for configurable blur quality levels.
- [gl/es] Optimized intersection hit testing, improving performance by ~
70–90%.
✨ Lottie
- Expanded slot overriding support to cover several previously unsupported properties. #4641
- Corrected playback clamping at the final animation frame.
- Fixed opacity being applied twice to solid layers.
- Fixed and stabilized audio offsets for trimmed layers.
- Added an API to query whether expression support is enabled.
- Improved solid-color hexadecimal conversion.
- Added master volume controls for media assets.
- Fixed matte sources being hidden when referenced through the
tpproperty.
🖼️ Picture
- [svg] Fixed invalid pointer comparisons during style parsing.
- [svg] Added proper support for
rgba()colors in fills and strokes. - [jpg] Fixed a buffer overflow caused by malformed JPEG input and improved loader stability. GHSA-mw4c-w54x-248r
🔤 Font
🛠️ Build & Infrastructure
- Fixed SIMD detection on AArch64 CPUs.
🧩 API Updates
- C++ APIs:
+ Result::SystemError
+ void* Paint::data
+ uint32_t Fill::colorStops(const ColorStop** colorStops = nullptr) const
+ Result LottieAnimation::volume(float value)
+ float LottieAnimation::volume() const
+ static bool LottieAnimation::expressions()- C APIs:
+ TVG_RESULT_SYSTEM_ERROR
+ Tvg_Result tvg_paint_set_data(Tvg_Paint paint, void* data)
+ void* tvg_paint_get_data(const Tvg_Paint paint)
+ bool tvg_lottie_animation_expressions_supported()
+ Tvg_Result tvg_lottie_animation_set_volume(Tvg_Animation animation, float volume)
+ float tvg_lottie_animation_get_volume(const Tvg_Animation animation)✅ Additional Notes
The Paint::data field and its corresponding C APIs provide opaque storage for user-defined data. ThorVG neither interprets this value nor manages the lifetime of the referenced data.
Full Changelog: v1.1.1...v1.1.2