Repository navigation
2.45.0
This release adds experimental inkbleed antialiasing to @rive-app/webgl2, along with angular (sweep) gradients, artboard paints, and a handful of fixes.
New
Inkbleed antialiasing (WebGL2 only)
Inkbleed is a new antialiasing mode in the Rive Renderer, offered as an alternative to MSAA. Opt in when creating the Rive instance:
import { Rive } from "@rive-app/webgl2";
const r = new Rive({
canvas,
src: "my-file.riv",
enableInkbleed: true,
});
// Toggle at runtime (only works if enabled at construction)
r.inkbleed = false;Notes:
- It disables the canvas's native MSAA.
- Fills that don't use the clockwise fill rule are converted to clockwise on a best-effort basis; worth checking for visual differences
- Edges bleed out by about half a pixel, which is most noticeable on thin strokes.
- It doesn't apply when using the shared offscreen renderer (
useOffscreenRenderer: true).
Other additions
- Angular (sweep) gradients
- Painting with an artboard (artboard as a paint source)
- String template data binding converter
- Text input now blurs when pressing outside the focused field
Fixes
- Deferred / GPU Canvas: only replay a canvas's last frame per session frame, and back a canvas before a paint samples its image
- Mesh buffers now sync when a mesh samples a canvas image
- Scripts without pointer handlers no longer block pointer hits
- Variable font cache is cleared when the base font is null
- Backwards states entered at their forward twin's end now play correctly
- GL storage-texture polyfill fixes on Mali GPUs
Performance
- Several renderer improvements: pixel bounds, cubic chopping, stroke cusps, per-verb path counts, draw sort ties
- Text layout is solved once per change; runtime advance and keyframe apply are cheaper
Commits
- fix(artemis): kit lanes build harfbuzz again (#14919) f6f6162502
28e6804 - fix(rasc): deep review fixes across the compiler, frame gc, hosts and aot (#14805) 0964d166c2
c2239ea - fix(ore): run animascript in the web test player and take anisotropic samplers on webgpu (#14924) fb3c617552
c3de725 - fix(housekeeping): Reformat with clang-format 19.1.7 (#14927) 49c42f3a86
fabeea4 - perf(renderer): Make a ShaderFeature for angular gradients (#14826) 2fc1a52418
b2a926a - chore(c++): clang-format changes (#14883) c87e67374e
ce87cb1 - feat(d3d/12): inkbleed (#14855) e8230e6d6c
aa2ea34 - fix(deferred): replay only a canvas's last frame per session frame (#14913) d3495be515
839cbff - fix(ore): derive automatic layouts from a pipeline's own entry points (#14918) 0c99e9ed71
d2d0165 - feat(text input): blur on a press outside the focused field (#14687) 315f0f8aa9
bf309ed - perf(layout): make a stack's cell the stack (
minmax(0, 1fr)) (#14914) 5237e87d45012d48a - perf(runtime): solve a text's layout once per change (#14905) ed4257407e
1b52c0b - feat: base support for Angular (sweep) gradients (#14841) 82759fe334
d0ea1ca - fix(vulkan): stop aborting when the loader fails extension enumeration (#14832) b04bcf8b50
7f4735b - fix(web): sync mesh buffers when a mesh samples a canvas image (#14894) f89f0962e1
7510399 - perf(ore): stop stalling android frames on gpu canvas waits (#14879) ac444ea724
78100c3 - perf(renderer): Track per-verb counts in RawPath (#14858) 8f26372882
f47103c - perf(renderer): Skip the full chop search for cubics that definitely don't need chops (#14859) 3054bea6d1
42a37c8 - perf(renderer): Draw stroke cusps as full round joins (#14857) fddb30d8c4
0eebd28 - perf(math): SIMD helpers, and faster float min/max on 32-bit ARM (#14860) eacb8fd4c6
5ae131e - fix(runtime): stop scripts without pointer handlers blocking pointer hits (#14650) 86830a1eaa
f801525 - perf(renderer): Pixel bounds calculation perf improvements (#14856) 68469c17f4
d3db11b - fix (runtime) Ensure that when a variable font is updated, if the base font is null the variable font cache is cleared. (#14861) 39d02d9083
7493154 - CLI: add optional native REV authoring (#14708) 2690b5c2e6
1aba97f - fix(renderer): rotate and fence the GL storage-texture polyfill on Mali (#14846) cde30f8817
95b13f0 - fix(scripting): stop the editor piling up script property wrappers, make untracking O(1) (#14854) b338e46bf8
6fe233b - feat(unreal) Rhi inkbleed support (#14796) 34aabd1345
b3a87d8 - chore(renderer): Add ubershader pre-creation to GL render context (#14849) f652c01305
8692640 - feat(runtime): add support for painting with an artboard (#14661) 7e93df692d
715388c - feat(renderer): Expose RenderContext::selectInterlockMode() (#14844) 7f0f87751a
0aaaf83 - fix(core, runtime): stop script undo at its starting text and build editor runtimes again (#14836) ef0f2d25b2
742d4ac - feat(data-binding): string template converter (#14752) f00868b041
ff04f05 - fix(deferred): back a canvas before a paint samples its image (#14819) 767340d959
59060e4 - feat(renderer): Angular Gradients (#14792) 5700c26022
2a08e64 - fix(CLI): library view models broke in the CLI (#14821) ee15f4de7a
ccf8e74 - perf(renderer): Break draw sort ties by draw index (#14755) 4efcefbc3c
239ee3a - fix(ore): refuse empty bind group entries and skip comments when placing entry points (#14804) 9e3eda5d8f
3cc71b2 - CLI: add a font viewer with interactive character previews (#14788) 4827c3f7bf
594c0a2 - feat(ore): catch what WebGPU rejects before it reaches the web (#14802) 280ddfd23e
1a56eb1 - fix(runtime): play a backwards state entered at its forward twin's en… (#14795) 33cd3ae5c8
3ab3976 - fix(scripting): release reaped handles after the frame collection (#14760) 8ba2c2772f
589b787 - perf(runtime): sync selectable text over drawables, not every object (#14772) 22c7218f9b
ebe5f02 - fix(runtime): drop draw targets whose drawable doesn't resolve (#14771) 0c128612bf
0bcb5ac - fix(runtime): reclaim large script buffers at the next frame and pace chained async work (#14769) 4a48578cdd
1e36ddc - perf(runtime): collapsed components and keyframe applies (#14764) 815caccd33
2e48a85 - feat(interpolators): Instance scripted interpolators per owner, shared down layout inherit… (#14732) 60a83e153a
85c09cc - perf(runtime): runtime performance improvements (#14761) fde0fe1f7b
0ae84d6