Skip to content

ThorVG 1.1.3

Latest

Choose a tag to compare

@hermet hermet released this 15 Oct 17:08
· 318 commits to main since this release

This release introduces conic gradients and Motion Blur effects, alongside significant improvements to rendering performance and reliability across the CPU, OpenGL(WebGL), and WebGPU engines. CPU rasterization benefits from expanded SIMD acceleration, including AVX2 support, while GPU optimizations improve stroke rendering performance by up to 2×.

Lottie rendering accuracy has been improved through modifier and expression fixes, while SVG compliance and font compatibility have been further enhanced. This release also strengthens thread safety, partial rendering interface support, and memory safety, resolves multiple security vulnerabilities, and enables SIMD optimizations by default.

🚀 Engines

  • [core] Introduce conic gradient support #4347
  • [core] Add Motion Blur scene effect support #4845
  • [core] Fix incorrect bounds calculations for chained scene effects
  • [core] Ensure thread-safe engine initialization and shutdown
  • [core] Introduce a canvas dirty-region interface for partial updates #4214
  • [cpu] Expand SIMD acceleration to grayscale, blur, drop shadows, and color conversion for improved performance #29 #30
  • [cpu] Upgrade x86 SIMD support to AVX2 #29
  • [cpu] Introduce runtime SIMD detection and fallback support #29
  • [cpu] Improve dashed stroke rendering accuracy #2925 #2094
  • [cpu] Fix a gradient-related memory access violation #4852
  • [gpu] Fix hit testing for unfilled shapes and ensure correct fill-rule handling
  • [gl] Optimize opaque stroke rendering with stencil passes, achieving up to 2× faster performance
  • [wgpu] Fix scene effect chaining to ensure all effects are applied correctly
  • [wgpu] Respect canvas clear behavior #4557
  • [wgpu] Eliminate redundant stencil passes for improved stroke rendering performance up to ~30%

✨ Lottie

  • Fix incorrect modifier chaining order #3539
  • Generate cubic segments for modifier lines to improve rendering accuracy #3539
  • Fix incorrect color expression conversions #4907
  • Fix missing offset points following degenerate cubic segments in the Offset Paths modifier
  • Validate audio asset types for improved robustness
  • Resolve reported security vulnerabilities GHSA-p88x-f767-g2qp GHSA-p53f-r8c4-vfpf GHSA-ggr5-pgqr-5hmh

🖼️ Picture

  • [svg] Improve SVG compliance for circle and ellipse radius handling #4840
  • [svg] Ignore invalid stroke-dasharray values #4877
  • [svg] Apply CSS rules from all <style> elements for improved SVG compliance #4871
  • [webp] Fix a heap buffer overflow in VP8L Huffman table construction

🔤 Font

  • [ttf] Add support for Apple kern table version 1 and legacy Unicode cmap formats #4917

🛠️ Build & Infrastructure

  • SIMD is now enabled by default and SIMD compile-time definition maco has been updated.
THORVG_AVX_VECTOR_SUPPORT -> THORVG_AVX_SUPPORT
THORVG_NEON_VECTOR_SUPPORT -> THORVG_NEON_SUPPORT

🧩 API Updates

  • C++
+ Type::ConicGradient
+ struct ConicGradient : Fill
+ Result ConicGradient::conic(float cx, float cy, float angle) noexcept
+ Result ConicGradient::conic(float* cx, float* cy, float* angle = nullptr) const noexcept
+ static ConicGradient* ConicGradient::gen() noexcept
+ Type ConicGradient::type() const noexcept
+ Result Scene::add(SceneEffect::MotionBlur, distance, angle, quality)
+ ColorSpace::XBGR8888
+ ColorSpace::XRGB8888
+ struct Region
+ uint32_t Canvas::dirtyRegions() const
+ Result Canvas::dirtyRegions(Region*, uint32_t) const
  • CAPI
+ TVG_TYPE_CONIC_GRAD
+ Tvg_Gradient tvg_conic_gradient_new(void)
+ Tvg_Result tvg_conic_gradient_set(Tvg_Gradient grad, float cx, float cy, float angle)
+ Tvg_Result tvg_conic_gradient_get(Tvg_Gradient grad, float* cx, float* cy, float* angle)
+ Tvg_Result tvg_scene_add_effect_motion_blur(Tvg_Paint scene, double distance, double angle, int quality)
+ TVG_COLORSPACE_XBGR8888
+ TVG_COLORSPACE_XRGB8888
+ Tvg_Region
+ uint32_t tvg_canvas_get_dirty_regions_cnt(Tvg_Canvas)
+ Tvg_Result tvg_canvas_get_dirty_regions(Tvg_Canvas, Tvg_Region*, uint32_t)

✅ Additional Notes

To explicitly disable SIMD optimizations, use the Meson build option -Dsimd=false.

Full Changelog: v1.1.2...v1.1.3