598 Commits

Author SHA1 Message Date
HayesGordon
53d173c4c4 chore(flutter): release 0.14.4 (#11797) ff2554c258
* chore(flutter): release 0.14.4

* docs: update linux readme support

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2026-03-03 14:42:19 +00:00
HayesGordon
a033d05081 fix: RivePanel intercept all pointer events (#11786) bc003d5d87
fix: reinit scripted objects owned by the state machine (#11783) 72f38fef07
fix: reinit scripted objects owned by the state machine when data binding is updated

chore: make viewmodel references safer (#11781) 0961388866

fix(unit tests): Update a test case to have a correctly-formatted category (#11778) 4edb867bde
One change updated the TEST_CASE categories to have braces `[ ]` since that's how they're expected to work, but another change added a test without. This fixes that one case.

Intersection board in renderer now allows overlap (#11724) 352adc26ac
The intersection board in the renderer currently breaks any overlapping shapes into separate draw groups. This change allows the render context to specify when overlapping within a draw group could be allowed.

feat(vkcwa): Move borrowed coverage to a dedicated subpass (#11761) 57feaeef08
This allows us to remove some dependencies from the main subpass and is
a more clear description of what we're doing -- a single rendering of
borrowed coverage, followed by moving on to the main subpass. It also
avoids some issues on Qualcomm with having SHADER_READ/WRITE
dependencies combined with input attachment dependencies on the main
subpass.

fix: allow artboard conditions without data context (#11776) e9c66affc8

fix(editor): stop audio when playback is stopped (#11771) d8ff1c2d88
* fix(editor): stop audio when playback is stopped

* feature: add pause, play and resume support for audio sounds in scripting

Armor the use of mapped gpu buffers (#11738) c4874f9ca2
It's possible that a GPU resource fails to map to system memory for some reason (for instance: if we lost the GL context). In that case, rather than attempt to write to a null pointer, we should instead just fail to draw anything.

Create TesselationDataFormat.txt (#11767) 2d76643c5e
* Create TesselationDataFormat.txt

* Josh nitpicking

* Fix Names

* Update TesselationDataFormat.txt

* Update TesselationDataFormat.txt

* Rename file

feature: expand view model instance support in scripting (#11744) a1966ba517

ArtboardComponentList optimizations (#11757) a3ef3daa73
Implements a couple of optimizations for Artboard lists:

Don't syncLayoutChildren during updateList as the artboards are being built up, only sync afterwards
For non-virtualized lists, keep the artboard and state machine instances in a vector and get them by index rather than having to look them up using their corresponding list item.

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2026-02-27 18:04:03 +00:00
HayesGordon
1c8c51de60 chore(flutter): release 0.14.3 (#11696) bc92b879fb
fix: only disable microprofile’s webserver for rive_native (#11729) fba8d3eb5a
* fix: only disable microprofile’s webserver for rive_native

* fix: re-add MicroProfileWebServerStart()

chore: do not advance data binds without source (#11727) 44b4d20401

fix: iterate draw target orders if list is not empty (#11723) c80de97d44

refactor(rive_native): flutter runtime build without rive_tools (#11712) 0170b92c8c
* refactor(rive_native): flutter runtime build without rive_tools

* test(flutter): fix runtime shared tests

feat(vk): Implement clipRect and dither for clockwiseAtomic (#11709) 78c811b5dc
feat(vk): Implement clipRect and dither for clockwise atomic

Stateful Components (#11706) 37f69c268c
This is the first part of making Components more self contained and providing simpler interfaces when using them in an Artboard. This PR adds an isStateful flag to Artboards. When marked stateful, an Artboard's host will generate and bind to a ViewModel instance at runtime, and that VM instance is detached from the File's VM tree.

fix(vk): Always use premultiplied alpha (#11674) 92387c12da
Premultiplied alpha is better for dithering because we can just pre-add
the dither before blending. (With the minor caveat that a negative
dither may not take full effect when the output color is already 0.)
This PR converts all the unmultiplied algorithms in vulkan to premul.

Improve Library Script dependency import (#11681) 7a527f1881
This PR reinstates proper storage of a script's dependencies as a core property and also greatly increases time to import from minutes to seconds by preventing unnecessary recompilation (tested against the box2d library), and now imports all dependencies again.

Nnnnn update flamegraph UI 2 (#11695) 29c76e799a
* support downloading profile assets on demand
* chore: more profiler updates

fix(unreal): Fixed Mac RHI (#11694) 8e1ff5eb60
* fixed building on mac, started fixing atlas change for rhi

* fixed atlas render for rhi

* perf test stuff

* fix rhi mac SM6

* added tods changes for fab store compliance

chore(editor): get viewmodel instances from cpp on demand (#11680) d04d8106fb
* serialize viewmodel instances on demand

* move map outside file to avoid memory leaks

Optimized feather (#11625) 72f05121ea
* Convert to Float16

* Clang

* Update render_context_vulkan_impl.cpp

* Updated GMS

* Update render_context_gl_impl.cpp

* Update

* Update gpu_namespace_test.cpp

* Update gpu_namespace_test.cpp

* clang

* Comments

* clang

* Update common.glsl

* Update Shaders

* Add non conversion filtering path

* Update draw_path_common.glsl

* Remove gather and use a R16 texture for atlas

* Update draw_path_common.glsl

* Update draw_path_common.glsl

* Update draw_path_common.glsl

* Update draw_path_common.glsl

* Revert back to R32

* Update render_context_d3d_impl.cpp

* Update draw_path_common.glsl

* Update draw_path_common.glsl

* Update draw_path_common.glsl

* Update draw_path_common.glsl

* Update render_context_metal_impl.mm

* remove r16

* Update pipeline_manager_vulkan.cpp

* Update pipeline_manager_vulkan.cpp

* Change metal to R16F

* Moved filter_feather into a inline function

* Rebase GMs

* Restore 16 bit

* Fixes

* Update pipeline_manager_vulkan.cpp

* Clang

* Update GMs

* Update GMS

* Remove setting feather texture

* clang

* Update Gms

* GMS

* Update GMs

* Update pr_platform_tests.yaml

* GMS

* Change min to clamp

* Rebase GMs

* GMS

* GMS

* GMS

* GMS

* GMS

* gms

* GMS

* GMs

* GMs

* GMS

Fix Lua stack imbalance when registering module (#11683) a03a19071f

Make better dithertypes image (#11664) 3fb7ee93b6
* Update dithertypes.cpp

* Create dithertypes.png

* add gms

* Rebase GMs

* Add GMS

* GMS

* GMS

* GMS

feat(renderer): Implement dither for clockwise mode (#11660) 1de6e822b1
Also requires bumping the scratch-color texture to rgb10_a2 so we
maintain better precision for the dither.

feature: Mirror Performance Profiling & Editor Performance View (#11667) 9ff17d62ca
* feature: adding profiler to ffi

* feature: performance metrics

* fix: mirror shows coop loading progress

* feature: add mirror tests

* fix: feature flagged performance profiler

* fix: mirror strings

* fix: ui strings for profiler panel

* fix: missed performance_panel.dart

* fix: microprofile wasm

* fix: rive_binding

feat(vk): Add an option to disable fixed function clockwise mode (#11666) 838cad2bf2
Dithering does better when we evaluate our blend equations in medium
precision from the fragment shader, vs letting it happen in the blend
unit (which, presumably, must be lower precision). For this reason, an
app may wish to disable "fixed function" rendering for clockwise mode.

fix(shaders): fix for angle gm (#11670) f4c16df15d
fix for angle gm

Convert Atlas texture to be Float16 from Float32 (#11637) ce781fdcc0
* Convert to Float16

* Clang

* Update render_context_vulkan_impl.cpp

* Updated GMS

* Update render_context_gl_impl.cpp

* gms

* Josh's comments

* GMS

* Update GMS

* Rebase GMS

* GMS

* GMS

fix(renderer): Interleave positive and negative feather atlas triangles (#11654) 37764336db
We were rendering the atlas with all negative triangles first, followed
by all positive triangles. This is the worst possible ordering for
maintaining high precision in a 16-bit coverage buffer, since as the
magnitude accumulates, we lose the lower bits. Instead, render the
positive/negative triangles interleaved, in the same order naturally
come in. This requires an extra check in the fragment shader for whether
the triangle is clockwise.

fix: Check for bindableProperty nullptr in TransitionViewModelCondition (#11653) aa788cab46

Microprofile on Mac (#11650) c0ee8aa205
* Update premake5_v2.lua

* Update premake5.lua

* Update fiddle_context_metal.mm

* Update premake5.lua

feat: Layout aspect ratio (#11630) e4ac15fc2b
Adds support for aspect ratio (which is a numeric value representing the ratio of the width to the height of a layout).

For example:
A value of 2 means the width will be twice as large as the height
A value of 0.5 means the width will be half as large as the height

Sometimes you may want to set the dominant axis (for example, use the width value as source of truth to compute the height value using the aspect ratio, or vice versa). Yoga allows this by using it's parent layout direction, and that is what we do. If the parent is set to Row, it will prioritize the width and compute the height, and if its set to Column, it will prioritize the height and compute the width.

Default value is 0, in which case it does not apply any aspect ratio to the layout computations. May need a UX pass.

feature: mirror! (#11640) c7217d5b3c
* feature: mirror!

* feature: add console

fix: dispose ScriptedContext when ScriptedObject is disposed (#11616) a153b953bf

feature: expose audio engine absolute time for synced playback (#11619) 3109712183
* feature: expose audio engine absolute time for synced playback

Add dither functions (#11282) 599f58a196
* Add dither functions

* Update draw_raster_order_mesh.frag

* Update draw_raster_order_mesh.frag

* Update draw_raster_order_mesh.frag

* Cleaned up code

* Claaaaaaannnng

* Add to MSAA and clockwise

* More updates

* Add to atomic path

* Update draw_clockwise_atomic_path.glsl

* Claaaaannnngggg

* Add ditherScale and ditherBias to flush uniforms

* Add 4x4 bayer option

* Update common.glsl

* Added more atomic dithering

* Moved ditherScale and ditherpass to be passed in

* Clang

* clean up

* Add temporal animation on dither pattern (complement of odd frame)

* Add temporal dither as well as #Defines

* clang

* clang

* clang

* Move to shader misc flags

* clang

* clang

* Update specialization.glsl

* Fix atomic

* clang format

* fix cast to half

* Add selection of dither modes

* Clang format

* Address Chris' comments

* address more comments

* More updates

* Clang format

* Remoe lines

* Move to m_baselineShaderMiscFlags

* Move shader bits to pack to 2 instead of 3 bits

* Update gpu.hpp

* Handle VK

* Delete draw_clockwise_atomic_image_mesh.glsl

* Clang

* Address comments

* Update draw_mesh.frag

* Add GM

* Update VK

* clang format

* Update gpu.cpp

* Update dithertypes.cpp

* Update atomic_draw.glsl

* Update comparison for dither type

* clang format

* Address comments

* Update render_context.hpp

* More comments

* clang

* More comments

* More comments

* clang

* Update Gms

* GMS

* GMs

* Update background_shader_compiler.mm

* Update render_context_metal_impl.mm

* clang

* GM

* Change the dither code to be on a dynamic branch

* Removed all shader viariants for dithering

* Update common.glsl

* Remove branch on dither

* Add dither as a shader feature

* Update gpu.cpp

* Clang

* Clang

* VK

* Update dithertypes.cpp

* Clang gm

* Clang

* Update metal stuff

* Clang

* Update generate_draw_combinations.py

* Update generate_draw_combinations.py

* Update background_shader_compiler.mm

* Update render_context_metal_impl.mm

* Update render_context_metal_impl.mm

* Fix vertex

* Clang

* GMs

* Update gms

* Update draw_pipeline_vulkan.cpp

* More GMs

* Update gpu.hpp

* Update gms

* Update draw_pipeline_vulkan.cpp

* More GMs

* More GMs

* Update GMs

* Update dithertypes.cpp

* GMs

* Clang

* Update GMs

* GMS

* More gms

* Update gpu.hpp

* Address comments

* Clang

* Clang

* Update common.glsl

* Update common.glsl

* Fix metal

* clang

* Gms

* Update gpu.hpp

* gms

* gms

* goldens

* Update common.glsl

* whitespace

* Update gpu.hpp

* Update dithertypes.cpp

* Update GMS from master

* GMS

* Remove all dithertypes gm

* Clang

* Update GMs

feat(vk): Add a "virtual tile" feature (#11589) d4355212e2
Adds a frame option for splitting the rendering up into virtual tiles.
As of now, each tile gets drawn in a separate render pass. The purpose
of these virtual tiles, for now, is to break the frame up into smaller
chunks so that Rive can be pre-empted by other rendering processes. This
is only supported on Vulkan/non-msaa.

Changed namespace of RectanizerSkyline (#11617) 68d898e3de
* Changed namespace

* Update sk_rectanizer_test.cpp

Add ease in out code (#11607) 33e98faa6a
* Add ease in out code

* Update

* Update gpu_namespace_test.cpp

* Update constants.glsl

* Update gpu_namespace_test.cpp

* Update gpu.hpp

* Clang

* Update gpu_namespace_test.cpp

* Update gpu_namespace_test.cpp

* clang

* Update GMS

* More GMS

* more gms

* gms

* Comments

* clang

* Update common.glsl

* Update Shaders

fix(Unreal): UE platform updates (#11621) 9df72a3757
* updated platform for mini audio

* fix tesselation shader

* fixed pixel shader output for atals texture

* needed define

feature: rcp<ScriptingVM> (#11620) 53de8c7b01

feature(unreal): New Platform support (#11604) 7182effde6
* initial switch commit

* switch support. Added force MSAA define, properly link against rive core built for switch, switch plugin for unreal, seperate draw using blt texture fore resolve

* now play animation if no statemachine is found

* format

* copy draw list for msaa

* switch wip

* initial switch working passing gm / golds in atomic mode

* switch not builds correctly alongside the other platforms

* wrap path id in ifdefs

fix: use after free of lua_State (#11618) fb6d35a8d3

Fix script compilation speed (#11592) c286304f4d
* feature: export all scripts

* fix: pallettes

* working on scripting workspace

* asan

* feature: recompile full vm

* feature: ephemeral flag

* feature: map generator refs

* feature: compilation time

* fix: remove accidentally committed files

* fix: better request_vm_test.cpp

* cleanup

* fix: wasm binding

* fix: clang-format

* fix: rive.dart

* fix: add missing scripts

* fix: remove unused function

* fix: make_docs.sh

* fix: riveFileSetScriptingState nullable

* fiix: cleanup fprintf

* fix: cleanup

* fix: format

* fix: ui strings

* fix: comment

* feature: export in compilation order

* chore: clarifying comment

* fix: share binary writer

* fix: missed endif

* fix: add miniaudio to scripting workspace

* fix: failing tests

* fix: tests

feature: fast function calls for Vector (#11602) 953dd2021b
* feature: fast function calls

* fix: clang_format vector test

* fix: missing include

feature: add audio support on scripts (#11582) 3e2bbcf7f0

fix: remove metatable creation (#11598) bd80286805
fix: we do not need to create a metatable and it was causing issue because it was shared byu multiple tables

feature: add support to provide view model instance to artboard and p… (#11590) 924040d3e2
feature: add support to provide view model instance to artboard and pass parent data context

feature: add support for deterministicMode for tests (#11562) 0bd4a639ab

feature: add support for asPath and asPaint script methods (#11580) 6ce4ab9eb1

chore(Vulkan): Vulkan "core" is now Vulkan 1.1 (#11581) 9b93015635
The Rive Vulkan renderer requires a minimum spec of Vulkan 1.1, but the core code was still setting 1.0 as the minimum supported version. This was fine with our tests because we were never trying to run them on devices that didn't support at least 1.1, but this updates core so that it's consistent with our minimum.

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2026-02-23 15:55:24 +00:00
HayesGordon
9a54aa258f chore(flutter): release 0.14.2 (#11584) 9c84acd0f7
Co-authored-by: Gordon <pggordonhayes@gmail.com>
2026-02-03 15:30:46 +00:00
HayesGordon
69df876276 docs(flutter): point to pub example (#11573) 7d19394530
* docs(flutter): point to pub example

* docs(flutter): additional instructions in example folder

feature(editor): Importing a library script imports its dependencies (#11385) 11572bfdab
This PR adds support for automatically adding any dependency scripts of a library script that is added to a file. We recursively walk down the dependencies until they are all added as ScriptAssets to the host file.

Includes an update to peon worker to return dependencyIds and folderPath with the script attributes. Namespacing using folders isn't supported in this PR but will be addressed subsequently.

fix: missing blob_asset.json files (#11574) 0e3db43471
feature: the blob

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2026-02-03 09:42:08 +00:00
HayesGordon
0556924fe4 chore(flutter): mark internal members and expand comments (#11506) 440cbadbf3
* chore(flutter): mark internal members and expand comments

* chore(flutter): hide internal member

* chore: formatting

fix: hit tests on leaves of collapsed layouts should not succeed (#11568) e680a845a5

fix: luau stack on layouts (#11565) 55743a6610

feature: expose data context via scripting (#11560) 02996b61bb

refactor(Renderer): Better Offscreen render support (#11521) b840c40aa1
* fixed blend mode in d3d12. made offscreen render targets work for d3d and d3d12

* format

* added offscreen rendering to Unreal testing window

* fix comment and typo

* updated rhi to also only do source blending when needed

* added new golds

* more golds

* more golds

chore(Vulkan): Make the Vulkan bootstrapping code error handling more recoverable (#11536) 482babcfce
Rather than asserting/aborting on failures in the bootstrapping code, this change updates it to return errors (sometimes by error code, sometimes just as a failure with logging, depending on the scenario). This should be useful for the high-level Android runtime's Vulkan support.

fix(fiddle_context): fix memory leak when window resized (#11557) 82290a8976
The path fiddle context was leaking IO surfaces inside of the view layer, and putting the contents of the `onSizeChanged`, `flushPLSContext`, and `end` functions solves it.

fix(editor): Fix crashes when resizing hierarchy panel and generating share link (#11556) 84435c6038
Fixes 2 crashes in editor:

When the editor window is resized to a small size, then the hierarchy panel is resized, it can result in a dino crash
An unrelated crash was discovered when trying to export a share link. Added a nullptr check to resolve it.

fix: Only apply layout interpolation on new frame (#11555) 4c6e0011da
Previously we weren't checking for the newframe flag prior to applying layout interpolation which caused us to return true when we shouldn't (resulting in unnecessary option C loops). This PR adds that check. This also resulted in layout animation applying a frame to early.

feature: blob asset! (#11554) fdaec2ec5d

feature: ScriptedRenderImage! (#11473) 12f56c871a
* feature: ScriptedRenderImage!

* fix: failing tests

* fix: merge bug

* add image lookup callback for nested artboards

* remove imageLookupCallback

feature: bump to luau 706 (#11544) 0edc7b14a8
* feature: bump to luau 706

* fix: clang format

Prevent layout animation on Artboards just added to ArtboardHosts (#11548) f16f751405
* Prevent layout animation on List items just added to List

* Rebaseline silvers

fix: crash on script dispose (#11542) e86db167ed

feature: expose root viewmodel to scripting via context (#11539) 0eadaaea47

fix(apple): use core text suggested fallback font if necessary (#11530) 147fe75b6b

feature: add support for mapping view models to artboards in lists (#11524) 41002bf174
* feature: add support for mapping view models to artboards in an artboard list

fix(UAT): script asset key id (#11525) e59db089ed

feature: add support for creating text runs from view model lists (#11519) 904f37cdf3
* feature: add support for creating text runs from view model lists

Add copy/paste support for ScriptAssets (#11522) f2df4669c8
Users can now select a script in the assets panel and ctrl/cmd+c to copy and paste in the same file or between files. I didnt add copy/paste items to the right click menu in this PR, but we can if we decide its warranted.

This also adds a fix for a bug where when duplicating an Artboard that was marked as a component, the Component did not appear in the assets panel.

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2026-02-02 18:18:59 +00:00
HayesGordon
1953eb40c3 chore(flutter)!: update the minimum Flutter version to 3.28.0 (#11509) ca8bf93429
Nnnnn add scripted inputs (#11494) a8418441ca
* chore: add support for inputs in scripted istener and conditions

feature: add scripted transition condition protocol (#11479) 853b2a08b5
* feature: add scripted transition condition protocol

chore: process listeners in specified order (#11487) 3253c0beae
* chore: process listeners in specified order

* resolve sorting on export

Add microprofile support (#11403) c83919a247
* Initial commit

* Update macros

* Add GPU Markers

* Fix builds without microprofile

* minor updates

* clang format

* Update profiler.cpp

* clang format

* Name Main Thread

* Update profiler_macros.h

* Fix end flip

* Update fiddle_context_gl.cpp

* clang format

* Update rive_build_config.lua

* Update rive_build_config.lua

* forked microprofile so I can use a tag

* Update render_context_d3d_impl.cpp

* clang

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2026-01-20 17:57:18 +00:00
HayesGordon
fbfd485ecc feat(flutter): add a value stream to observable data binding properties (#11480) d020d4554c
Co-authored-by: Gordon <pggordonhayes@gmail.com>
2026-01-16 17:35:48 +00:00
HayesGordon
dd9acea80b feat(flutter): expose enumType on ViewModelInstanceEnum (#11470) f88b98828b
fix(gl): Get running on Adreno 308 (#11467) 28e95e51e7
Adreno 308 had a few issues:

  * Crash from drawing too many instances, which we work around by
    breaking them up with glFlush.

  * Compiler failure from the compiler declaring a 3.1 bulitin in ESSL
    3.0, which we work around with a #define.

  * The advertised max texture size is 8192, but textures larger than
    2048 seem to not work with EXT_multisampled_render_to_texture.
    Either way, we shouldn't have any gms larger than 2048 since that's
    the bare minimum per the spec. Shrink the larger gms down to 2048.

Rive had an issue as well:

  * With EXT_multisampled_render_to_texture but not
    KHR_blend_equation_advanced, we were trying to use the same texture
    for both msaa and the dstRead. Separate these into their own
    textures.

chore: Pass Lua VM from editor when decoding runtime File (#11458) f57124001d
The C++ runtime requires a ScriptingVM and lua_State to run scripts. Previously when a runtime File was built, we would always instance a ScriptingVM and lua_State. At runtime, this is required, however, when building the runtime in the editor, this resulted in additional objects being created that weren't needed. This PR passes the lua_State into File::import so that the file will only create the ScriptingVM once and either use the passed in lua_State or instance a new one if none is passed.

feature: scripted listener actions (#11468) f3a89390cb

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2026-01-16 10:39:29 +00:00
HayesGordon
2277511e92 chore(flutter): release 0.14.1 (#11456) bd02dca338
feat(Android): Scripting support (#11438) 9112280455
Adds the build flags required to enable scripting. Adds two samples, one for legacy, one for Compose, using the Blinko example.

Also patches the command server to accept script assets and not crash for unrecognized assets.

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2026-01-13 16:32:21 +00:00
HayesGordon
53056d7121 feat(flutter): compile with runtime scripting (#11432) 3c44afce94
* feat(flutter): compile with runtime scripting

* chore: revert editor only code

* chore: revert

* chore: add back dummy editor script linking

Fix ScriptedDrawable save/restore (#11451) e7142dcfed

No double deref luau (#11448) 62fcec60de

Add opacity support to ScriptedDrawables (#11446) 9b416a02f6

fix(scripting): search first parent transform component to build scri… (#11443) 99ca3a30cc
fix(scripting): search first parent transform component to build script node

feature: modulate opacity (#11427) 128d9d61e0
* feature: modulate opacity

* fix: clang-format

* fix: rust renderer has a no-op modulateOpacity

* fix: no-op modulateOpacity for canvas android

* feature: modulate opacity on android canvas

* fix: rcp ref

* fix: missing override

* fix: gms

* fix: make flutter_renderer match cg one

* fix: josh pr feedback

* fix: remove CG transparency layer

* fix: save modulated gradient up-front

* fix: store only one gradient ref

* fix: remove specific constructor

* fix: use GradDataArray!

* fix: expose currentModulatedOpacity

* fix: cg_factory modulated opacity value

* fix: modulate negative opacity test

* fix: verify double modulate negative also clamps

feature(scripting): add support for accessing view models and enum pr… (#11437) 620000211e
feature(scripting): add support for accessing view models and enum properties

Nnnnn provide path node data (#11428) 67006966a5
chore: replace path effect signature to pass full node to scripting

Scripting namespaces (#11429) f810efd11a

feature: add support for data binding scripted artboard inputs (#11423) 48d14f1521
chore: do not track nested artboard count

feature: configure scripting timeout & improve Data warnings (#11425) 8328e97639
* feature: configure timeout

* fix: check duplicate names of viewmodels/enums too

* feature: ui_strings for warning messages

* fix: check isNumber instead of isNil

feature(scripting): instance linear animations (#11386) 722a1ae998

feat(scripting): build dummy luau vm if disabled (#11422) 393e19b4fa

fix: Scroll with snapping max scroll target (#11419) ce274af56c

Nnnnn different fixes (#11415) 4b0ea7e631
* fix: invalidate effects when sorted

* improve scripted converters code

feat(scripting): forward declare luastate (#11418) a08d538dbf
Fixes an issue when building runtimes with scripting enabled where
certain headers may not be included

feature: pass view model instance to bindable artboard (#10815) 3734dc3ab9

Nnnnn fix memory lua issues (#11412) ba94f03ad0
* push scripted drawable to stack twice to ensure it is not destroyed before use
* code improvements

fix: trigger change on solid color change (#11399) b5a73917b1

chore: advance scripting only if it is still active (#11394) 0488666fb0
* chore: advance scripting only if it is still active

chore: Move clockwiseAtomic shaders to the new system (#11388) 85c5519c6e
With clockwise mode, we introduced ".vert" and ".frag" files and started
sharing the main vertex shaders with multiple fragment shaders. This PR
is a cleanup that removes redundant code and moves the clockwiseAtomic
shaders to that same system. clockwiseAtomic shaders also work out paint
colors via varyings now instead of storage buffers, which seems better
but doesn't register a difference in performance.

test: Add a 'paintType' option to player (#11371) 209e1b6d96
Allows us to turn off fills or strokes for testing.

fix(runtime): ScriptedArtboard origin fix (#11395) 88f2054b8a

fix(runtime): additional null checks on audio play (#11281) a4e9d50469
* fix(runtime): additional null checks on audio play

* chore: add additional null check for safety

fix(scripting): some crashed related to paths (#11378) c05b97d6d5
* fix(scripting): some crashed related to paths

chore: Enable with_rive_scripting flag for wasm (#11329) 8e395d6bb0

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2026-01-13 12:53:28 +00:00
HayesGordon
1ed742e74a fix(flutter): expose AudioSource and add example usage (#11380) da1c7a6ae2
Co-authored-by: Gordon <pggordonhayes@gmail.com>
2026-01-06 09:27:25 +00:00
HayesGordon
cd195cf325 chore(flutter): avoid name conflicts on Key and other cleanup (#11381) edc94495f2
* chore(flutter): avoid name conflicts on Key and other cleanup

* chore(flutter): analyzer warnings

chore: complete groups path effects work (#11373) 8f9dae9f36
* fix effects sorting

* fix Feature values

* invalidate effects on update instead than when dirt is added to avoid multiple invalidations per frame

* fix key conflict

feature: add group effects support (#11359) df0db41a9c

Nnnnn relative data bind all paths (#11346) 41d316c675
* StateMachineListener relative view model property path
* StateMachineFireTrigger relative view model property path
* ScriptInputViewModelProperty relative view model property path

fix: lua error on in-flight path mutation (#11350) 56f08da6b1
* fix: lua error on in-flight path mutation

* fix: remove DrawOption

* fix: failing tests

feature: add support for relative view model data bind paths for nested artboards (#11344) 923b32059d
feature: add support for relative view model data bind paths

fix: cast int as double when solo is bound to a number (#11332) 699b891b79

Library Scripts export fix (#11294) 978d565911

fix(editor): Properly remove all script core objects when deleted (#11324) a3e784a1f0
3 Fixes for Script asset deletion in this PR:

- Present a confirmation dialog if the script is being used by any scripted object on any artboard
- When script asset is deleted, make sure to clean up all of the associated core code file/line/points
- Also remove the LibraryCodeFile from the library cache. This fixes a bug where after deleting a library script, you couldn't add it back to the file again.

fix: initialize did change as true (#11323) 9f2de92c4c

feature: allow listeners to listen to any type of view model change (#11313) 4b7a5a8032

fix(vulkan): Fix "player" (#11314) 08c2e47d44
Testing window was restructured to allow the tests to destroy/recreate the device, but the render target was not being (re)created when the device was.

fix(unity): webgl harfbuzz conflict in unity 6.3 (#11309) 5e2ecca169

feature: support name based binding paths (#11007) a55da7f31f
* feature: support name based binding paths

Update public key for verifying script signatures (#11301) db3368437f

feat(vk): Avoid a copy for rasterOrdering non-input-attachment passes (#11298) e4ef1ece98
When the renderTarget doesn't support
VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, we have to use an offscreen color
texture instead. Previously, we would copy this offscreen texture back
into the renderTarget after the render pass, which incurred a
substantial amount of memory bandwidth. This PR instead transfers the
offscreen texture to the renderTarget as part of the render pass, and
then discards the offscreen texture, saving a fullscreen copy on TBDR
architectures.

feature: bytecode header format (#11293) 68f1096d75
* feature: bytecode header format

* Reexport scripting test rivs

* Reexport one more riv

fix(vk): Make the color ramp pass interruptible (#11270) ba953a142b
Color ramps are the final resource texture we need to make interruptible
for old Android GPUs that don't support complex render passes.

Also fix lots_of_tess_spans to look the same on MSAA and not.

Refactor Script registration (#11280) bc6f965d1f

chore: bump to luau 0.703 (#11285) 752595c590
* chore: bump to luau 0.703

* fix: error changed in linter

Add .frag and .vert to file list (#11289) 3bd6d37844
Update premake5_pls_renderer.lua

Remove Vulkan support for PowerVR devices below Vulkan 1.3 (#11284) f15e7dd47a
Due to issues with early PowerVR drivers, GL is recommended for these devices

fix(UAT): only trigger callback when instance is created from scripting (#11283) 7564ef1fcb

feat(runtime): skip drawing unchanged frames (#11127) f32a23806c
* skip drawing unchanged frames

fix(vulkan) Rebuild vulkan device between gms on less devices (#11275) 8cdc26684f
* fix(vulkan) Tighten the requirements for destroying/recreating the vulkan gms on Adrenos

This was causing a test failure on a couple devices with the same chipset and driver

* Increase timeout to 5

Nnnnn add data metatable and viewmodels (#11269) f23eb70aec
* feature(scripting): add support for accessing view models from context and creating view model from global data

fix(ci): Increase tolerance on histogram compare (#11274) 332a226197
lots_of_tess_spans_stroke is seeing a histogram result as low as .95087
on a correct image. Bump the default tolerance to .05 so we don't get
false negatives. Hopefully this holds us over until we can work on more
accurate image diffing.

fix(vk): Actually apply a workaround for the Android overflow texture (#11273) e6c21bf6fd
We had a nice comment describing why we shouldn't create the overflow
texture with VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, but then we went ahead
and accidentally created it as an input attachment anyway.

This PR actually applies the workaround described in the comment.

Also apply the "teardown after every GM" workaround to Adreno pre 1.3 GPUs,
since those also experience sporadic crashes and this appears to help.

fix(Vulkan) Work around a Vulkan driver OOM on Mali devices (#11271) 37439d5fb6
The Mali Vulkan driver/device was running out of memory internally, occasionally. This adds a hook into the testing window that gets run after each GM finishes, which TestingWindowAndroidVulkan now uses to tear the device down completely. The device then gets rebuilt as needed.

fix(editor): Input to VM toggle fix (#11272) 1dd286c979

Unity dx12 (#11162) 2517eb7d7f
* Initial

* Latest updates

* More updates

* Move some headers

* More cleanup

* clang format

* more clang updates

* Update d3d12_pipeline_manager.cpp

* Update d3d12_pipeline_manager.cpp

* More fixes

* Update unity d3d12

* Fix Pathfiddle

* Update code

* Updates

* Latest files

* Updates

* Fixes

* white space

* Formatting

* formatting

* Clang format

* clang format

* Update premake5.lua

* Update premake5.lua

* Update root.sig

fix(vk): Make the tessellation pass interruptible (#11233) e7608ff659
chore(vk): Make the tessellation pass interruptible

We recently worked around some driver crashes on Vulkan by breaking up
atlas & draw render passes that were too complex. This PR makes the
exact same workaround for tessellation passes, and adds a GM to catch
this case.

Layout animation time bindable (#11264) c95fe9334e

feat: Text input from editor + start of Focusable (#9905) e5c8a7ae8f
* feat: working on focusable

* feat: text events to rive native

* feat: runtime text from editor

* feat: text input in the editor

* chore: cleanup

* chore: fix non text builds

* chore: fix warning

* fix: key import in rive_native_web

* feat: text input for web rive_native

* chore: fixes

* chore: cleanup

* fix: remove unused imports

* chore: more tests for missed lines

feature(scripting): add support to create view model instances from s… (#11232) 6fc23e1608
* feature(scripting): add support to create view model instances from scripts

Scripting in Core Runtime (#11235) 0a5325e474

rev to luau 0.702 (#11259) b50983c49d

chore: bump macos-version-min to 11 (#11260) 08a3949a0d

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2026-01-05 18:16:32 +00:00
HayesGordon
f8898c4435 fix(flutter): missing artboard DataType enum (#11247) cfede8c1c3
fix(wgpu): Bit rot (#11245) 47f4ec46d4
* Clean up some assumptions in WebGPU that support for PLS meant it was
  actually being used. Now that we support MSAA, it might not be in use.

* Clean up a refactoring typo that caused an input attachment to be
  deleted before it was used.

chore: skip save operations on clipped single shapes (#11244) d352fe277e

fix: virtualized lists with data bound artboards map to the correct s… (#11242) 44c9c0b2ec
fix: virtualized lists with data bound artboards map to the correct source

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-12-10 17:01:37 +00:00
HayesGordon
885a1154e0 chore(flutter): publish 0.14.0 (#11238) 057d841733
feat(vk): Set the maxTextureSize in Vulkan (#11227) 8b2069142c
Vulkan has always been using minimum sized atlases of 2048x2048 because
we forgot to set PlatformFeatures::maxTextureSize. Start grabbing this
value off the physicalDeviceProps to enable fewer flushes.

fix(vulkan): Resolve validation error when resuming too-complex render passes (#11229) 3a8b9ba454
Vulkan's LOAD_OP_LOAD cannot be specified on a render pass attachment that is IMAGE_LAYOUT_UNDEFINED - this conditionally makes the image layout GENERAL in those cases (and allows it to stay UNDEFINED for the general case, since the texture may not yet be initialized)

feature: add support for animated clipping layouts and shapes (#11222) e2a5390cb1

fix(Unreal): Unreal perf improvements (#11221) 6a24742e15
* move all used textures to rdg

* changes needed for packaging a game

fix(Unreal): Layout fit type fix (#11217) 294afdc22a
* Added set / reset size for artboarsd to command queue. Use this for render targets in unrel. Set size directly for widgets.

* removed original bounds

* made state machine advance when setting size

fix(vk): Adreno atlas rendering workaround (#11219) 9b177fd1df
Adreno 730, 740, and 830 don't seem to appreciate binding buffers and
updating descriptor sets before beginning the render pass, even though
this appears to be valid usage of the Vulkan API. Re-update atlas
rendering to begin the render pass first.

fix(vk): Workaround a crash on early Android tilers (#11212) 5d4d4b98f6
Some early Android tilers are known to crash when a render pass is too complex. This PR is a first stab at adding an "interrupt" mechanism to atlas and draw render passes, which allows us to break up our rendering into smaller chunks that don't crash. Currently, only rasterOrdering mode is supported for interrupting draw passes. We will need to investigate whether this workaround is also needed for msaa, tessellation, and gradient textures.

fix(Vulkan): Work around a driver issue causing graphical corruption, other minor changes (#11204) b8b0d3e01c
This change primarily works around a driver issue that was causing visual corruption on some newer Adreno-based devices.
There are other minor changes as well (displaying the driver version from the bootstrapping code, setting a minimum requirement of Vulkan 1.1 in the renderer)

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-12-08 15:35:09 +00:00
HayesGordon
ea769d78de fix(flutter): make RiveWidgetBuilder file loading cancellable (#11190) 9e48626a96
* fix(flutter): make RiveWidgetBuilder file loading cancellable

* docs: update CHANGELOG

Update the versions of the spir-v shaders to all be 460 (#11209) f38d54d8e4
Some tooling changed today-ish that is causing the 310 es shaders to fail to build with:
```
runner/_work/rive/rive/packages/runtime/tests/unit_tests/out/android_arm64_debug/include/generated/shaders/glsl.minified.glsl:450: 'token pasting (##)' : not supported with this profile: es
ERROR: spirv/blit_texture_as_draw_filtered.main:6: 'stringify (#)' : not supported with this profile: es
ERROR: spirv/blit_texture_as_draw_filtered.main:6: '#' : '#' is not followed by a macro parameter.
ERROR: spirv/blit_texture_as_draw_filtered.main:6: '' : missing #endif
ERROR: spirv/blit_texture_as_draw_filtered.main:6: '' : compilation terminated
ERROR: 5 compilation errors.  No code generated.
```

This is only a "310 es" issue, and so since most spir-v shaders are already 460, this moves the rest to be the same.

fix: list updates correctly when items are added or removed (#11206) 255f1ba3d2

fix: ignore non visible clips when removing redundant operations (#11207) 673820da1a

update scripted drawable clipping to new strategy and remove unused function (#11195) 8002b223a3
* update clipping to new strategy

fix(scripting): store data on all cases (#11197) 7fae9fb6c8

fix(EA): list index can be compared to numbers (#11194) e2f7d6cde1

feature: apply clippings as separate drawables (#11183) c3237c0283
* feature: apply clippings as separate drawables

chore(scripting): add clipping support to scripted drawables (#11184) 27085dfb0c

fix(editor): Display runtime errors when Script input VM properties not set (#11177) cd70e30236
Fixes a crash when trying to use pointer events when a ViewModel property input is not setup properly on a scripted drawable instance.

The code was checking for ScriptAsset.vm which will always be non-null when bytecode is compiled in the editor. We should be checking instead for ScriptedObject.state because that will only be non-null if the ScriptedObject has validated (and we early out if that is null so we don't crash).

Also added some errors when VM properties are not setup correctly as Script inputs so users will be aware that there is an issue with their VM setup or bindings

chore: Refactor invalidateEffect for StrokeEffects (#11173) 05630acdb1
Refactors how invalidateEffect in StrokeEffects work. Now there are 2 code paths:

invalidateEffectsFromLocal() - this is called from the StrokeEffect itself. It calls out to ShapePaint::invalidateEffects to let it invalidate any other StrokeEffects that may need to do so. It also calls invalidateEffect on itself.
invalidateEffects() - this can be called from the StrokeEffect (via invalidateEffectsFromLocal) on itself OR by ShapePaint while in the process of determining if any other StrokeEffects should be invalidated via the call above. This adds paint dirt to the StrokeEffect along with any additional work needed when invalidating.
This prevents invalidateEffect from calling ShapePaint::invalidateEffects multiple times.

This also resolves an issue with ScriptedPathEffects in Components

chore: complete scripted converters implementation (#11166) 55853117b2
chore: finish scripted converters implementation

chore: Preprocess transitions conditions on initialization (#11150) bb52cbd4a3
Preprocess transitions conditions on initialization

fix: reset interpolator and initialize it on convert (#11157) 0791ee519d
* fix: reset interpolator and initialize it on convert

feature: goto definition (#11143) 4f005f715e

chore: updating to luau_701 (#11142) d4dfc63c3a

fix(vk): Implement manual MSAA resolves (#11120) 756dc2db91
* fix(vk): Implement manual MSAA resolves

Some Android devices have issues with MSAA resolves when the MSAA color
buffer is also read as an input attachment. In the past we've worked
around this by adding an empty subpass at the end of the render pass.
This PR implements fully manual resolves instead, which we now use when
there are blend modes and partial updates. This is hopefully a more
stable workaround than a mystery subpass, and will ideally get better
performance as well when we don't need to resolve the entire render
target.

* Fix synchronization validation (had a write/write hazard between the image state transition and the load op)

* fix(vk): Implement manual MSAA resolves

Some Android devices have issues with MSAA resolves when the MSAA color
buffer is also read as an input attachment. In the past we've worked
around this by adding an empty subpass at the end of the render pass.
This PR implements fully manual resolves instead, which we now use when
there are blend modes and partial updates. This is hopefully a more
stable workaround than a mystery subpass, and will ideally get better
performance as well when we don't need to resolve the entire render
target.

* Fix synchronization validation (had a write/write hazard between the image state transition and the load op)

feature: add path effects for fills (#11136) 376052977b
feature: add support for path effects for fills

fix(vk): Only rely on implicit PowerVR raster ordering on Vulkan 1.3 (#11132) 4cdb5779cd
After testing a statistically significant number of devices (7,
specifically!) I have concluded that implicit PowerVR raster ordering
only works with Rive on Vulkan 1.3 contexts. Update our renderer
accordingly.

Update path_fiddle.cpp (#11123) 19be344a5a
* Update path_fiddle.cpp

* clang format

fix(Vulkan) Vulkan synchronization fixes (#11091) 810e208837
This gets (non-atomic) Vulkan rendering to pass the Vulkan synchronization validation layer tests.

Nnnnn add support for path effect part 3 (#11107) c27b081319
* WIP

* ui

* fix errors

* remove duplicate code

* remove empty switch case

* make pathData return required

* add web ffi path methods

fix: rename Node to NodeData (#11110) c46192f1fe

add support for path effect (#11095) ab13b4d1a2
* add support for stacked path effects

chore: rename vec2d to vector in scripts (#11097) 4ad14fbe73
* chore: rename vec2d to vector in scripts

* chore: replace comments

* chore: fix formatting

* chore: formatting

* fix: bad definition

* fix: pointer event

chore: Runtime Scripting fixes & tests (#11094) 539bd8c48c
- Call reinit on ScriptedObjects in Artboard::initialize as discussed. We still need to reinit in Artboard::internalDataContext, because things like ScriptInputViewModelProperty depends on the ScriptedObject having a datacontext, which we don't necessarily have at initialize time.
- Always run the setup code in ScriptedObject::scriptInit, but only run the init function if we verified its implementation.
- Added some tests. Still need to add more comprehensive tests once we can get rivs exporting with bytecode.

feature: autocomplete requires! (#11090) 6bd796b5f0
* feature: autocomplete requires!

* chore: cleanup

fix(vk): Never read the resolve attachment (#11081) 2430b66647
When Vulkan expands the renderTarget into the MSAA color buffer for
LoadAction::preserveRenderTarget, we've been reading the resolve texture
as an input attachment. But it's debatable whether a texture can be an
input attachment AND a resolve attachment in the same render pass, and
some early Qualcomm devices have struggled with this even if we
implement the MSAA resolve manually. For now, always copy out the render
target to a separate texture when there's a preserve.

chore(scripting): rename scripting (#11084) 85b425bf93
* chore(scripting): make init and draw optional

* chore(scripting): rename ScriptType to ScriptProtocol and none to utility

* rename Drawing to Node

Peon Worker Script Signing (#11063) 8748f53562
* feature: signing and compiling via ffi

* feature: script signing

* fix ups

* Fix tests

feature: Script signing (#11016) 9295f20b82
* feature: signing and compiling via ffi

* feature: script signing

* fix: missed with rive scripting

* chore: more fixes

* fix: rive_native wasm

* fix: missed dispose call for the workspace

* feature: optional signing

* chore: core collision

* feature: doing actual verification

* fix: signature verification at runtime

* chore: missed files

* fix: switch order

* fix: with rive scripting flag

* fix: core def collisions

* chore: unifying enrich assets

* chore: remove unnecessary type check

* fix: signing context

fix(vk): Use rasterOrdering mode on Imagination GPUs (#11072) 69b2a3c643
We already have a codepath that enables rasterOrdering on ARM, even
if the extension isn't present, because we know that's how these GPUs
work. If we enable this codepath on Imagination, it appears to work as
well. This works around an MSAA crash on Pixel 10.

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-12-03 15:06:17 +00:00
HayesGordon
218e71957d refactor(flutter): move rive_native setup from CMakeLists to Gradle (#11067) 2aa57b3d8a
* refactor(flutter): android move rive_native setup to gradle from CMakeLists

* chore(flutter): update rive_native android example

* chore(flutter): add android rive.native.skipSetup example

* docs: update CHANGELOG

* chore: revert example rive_native dep

feat(wgpu): Add core support for MSAA (#11040) cb9968caef
Implement an MSAA mode in WebGPU that doesn't rely on any optional
(non-core) features besides SPIR-V. This will be the catch-all fallback
that works everywhere.

fix(editor): Prevent runtime script advance when state machine not playing (#11062) 81f6b8ffa7

chore: rev to latest luau release 700 (rive_0_23) (#11060) 2ac436db1b
* chore: rev to latest luau release 700 (rive_0_23)

* fix: api changes

chore: ScriptedDataConverter in runtime (#11053) 05e1b4ab9f
ScriptedDataConverters in C++ runtime. Adds a new DataType.any which allows a datavalue to be applied as long as the propertyKey type matches the datavalue's type.

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-11-18 23:03:47 +00:00
HayesGordon
411ae722e7 chore(flutter): publish 0.14.0-dev.14 (#11056) 486d88ad91
Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-11-17 15:07:16 +00:00
HayesGordon
6e2f76e665 feat(flutter): expose method to access all text runs relative to artboard (#11034) 83eae64358
* feat(flutter): expose method to access all text runs to help migration

* docs(flutter): update changelog

* chore(flutter): avoid naming clash with editor

* ci(flutter): why new flutter break test :(

feature: add ScriptedContext (#11052) 1d2c69015a
* feature: add ScriptedContext

chore: cache advancing components and support any core object as adva… (#11039) a9e670e153
chore: cache advancing components and support any core object as advanceable

chore: Scripted PointerEvents at runtime (#11046) 7507e62b37
This PR refactors some of the StateMachine related code (listener groups) and adds support for pointer events to ScriptedDrawables.

feature: add contour measure to scripted path! (#11049) b63286db94
* feature: add contour measure to scripted path!

* fix: failing tests

fix: only delete invalid objects when an artboard is destroyed (#11048) c85665930c

chore: Perform Script's method validation only once (#11037) c783bb438c

fix: advance current state by 0 when there is no previous state (#10994) f1fb606c21
* fix: advance current state by 0 when there is no previous state
* fix memory leak

Scripted Layouts C++ Runtime (#10907) 6f471b7939

fix(webgpu): Various fixups (#11023) 4ecb920d73
Fix a couple shader flags in WebGPU (including some refactoring to
handle them at the RenderContext level instead of the backends).

Fix renderTarget{Width,Height} in TestingWindowWGPU.

Add a "--gms" option to check_golds.sh so we can skip goldens in local
runs and make them faster.

Add a "-r" option to check_golds.sh for release runs.

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-11-17 10:02:30 +00:00
HayesGordon
09f6c9d8e2 fix(rive_native): call textureFrameAvailable on main thread (#11011) 627eb78471
* fix(rive_native): call textureFrameAvailable on main thread

* fix(rive_native): cont textureFrameAvailable on platform thread

chore: Implement ScriptedObjectImporter to import ScriptInputs (#11002) 08647852bf

fix(dx12) intel and Intel arc support (#11022) 21cbb65eef
* fixed intel arc

* dont use raster ordering with intel arc

* better comment

* pulled out intel checks as requested on PR

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-11-13 20:16:45 +00:00
HayesGordon
786587c7ae ci(rive_native): expand runtime platform tests (#10979) 6b8c2178ff
* ci(rive_native): expand runtime platform tests

* ci: setup flutter

* ci: git lfs and pub get

* ci: flutter linux setup

* ci: sidestep windows

* ci: add rive native web integration test

* ci: skip full test suite on linux

* chore: force build

* ci: temp disable web integration test

* ci: only test web integration for now

* ci: debugging!

* ci: install xvfb

* ci: attempt fix

* ci: install npm deps

* ci: reduce linux deps for fast runs

* ci: renable all jobs

* ci: linux reduce deps install

* ci: add uuid and retry windows

* ci: ignore windows and linux unit tests for now

* ci: re-enable all tests

* ci: remove python venv

* ci(flutter): add higher level flutter package test for rive_native

chore: rev to luau 0.699 (#11019) 1bb021d018

Fix Vulkan bootstrapping API version reporting (#11001) f5191dd154
The version that was being passed to the rive vulkan context was the version from querying the instance, which can differ from the API version that the actual device supports. This now correctly passes the device's vulkan version, which eliminates the need for a weird workaround in the VMA initialization (where we thought we had a Vulkan 1.3 device but in fact it was only Vulkan 1.0).

Additionally mark the VKDBGUTILWARN003 message that happens on the S23s as non-aborting. It appears to be an incorrect warning - "Renderpass is not qualified for multipass due to a given subpass", for a renderpass that is not set up as multipass.

Update our signal handler to break into the Windows debugger if it's attached (#11015) d9b3ed9801
Update our signal handler to break into the debugger if it's attached on Windows

fix(wasm): Remove ASAN from the default WASM debug build (#10995) 0743b80014
This was causing our wasm debug binaries to become so large that some
browsers couldn't handle them anymore. If we need ASAN, we have a proper
"--with-asan" option for that now.

feat: Implement clockwise mode on GL_EXT_shader_pixel_local_storage2 (#10987) 5f018f395b
Clockwise mode finally gives us a really good use case for
EXT_shader_pixel_local_storage2. On scenes that don't use advanced
blend, this is showing speedups around 1.35x.

This PR also does some cleanup around consolidating the logic for
ShaderMiscFlags::fixedFunctionColorOutput, so we don't have to
re-implement the same logic in every backend.

chore: improve collapsed data bind processing performance (#10962) ed5a446ff2

fix(runtime): Revert state machine checks for needsAdvance (#10985) 3b82e09da9
Reverted an update where nested artboards were checking their nested state machine instances for needsAdvance and advancing if true. This appeared to fix (#10842) an issue that required a double advance when running goldens, however, there is actually another issue that this masked rather than fixing it. That will come in a seperate PR.

Report missing gms in overnight/manual GM Tests (#10988) 5615843df1
Now when Rive Slack Bot posts to the golden channel when a gm run (both gl and vulkan), it will also report the missing results (and missing goldens, should that be a thing) if there are any.

fix(renderer): d3d12 AMD / Intel support / raster order support (#10983) c47562209d
* proper states based one warnings. Support for gpunamefilter

* fix for raster order mode

* now works on AMD

* factored out wstring conversion

* clang format

* no need for pop back if using len -1

* removed uneeded forward declare

Bump to latest wagyu port (build 69) (#10977) d0b67890c8
Bump to latest wagyu port (build 69) to get access to wgpuWagyuStringArrayFreeMembers

feat(vk): Support faster texture updates (#10978) 0049d6e21e

fix: crash when multiple definitions have the same name (#10976) 43585faefe

Improvements to Browserstack golden/gm runs (#10967) d2f21b08aa
A few quality-of-life improvements to the way the Browserstack runs (and image diffing) work and look.

- Add a Device Summary to the generated diff page that shows the list of devices and how many tests passed/failed/were missing for each (with failures sorted to the top). This makes it easier when things are failing a lot (like currently in Vulkan) to more easily where the failures are
- Fix an error when running the Browserstack script on Windows
- Add the Android OS version to the device name (there are multiple of the same device make/model on Browerstack running on different OS versions, and we were squishing their results together into one pile)
- Simplify the device name for devices with a redundant model name (i.e. Google_Pixel_6 instead of Google_Pixel_6_Pixel_6)
- Set a display name on browser stack (mostly so that the browserstack dashboard will stop showing a warning that some tests don't have names), but the display name contains the backend name (or default if it was unspecified) so browsing between gl and vulkan runs is easier
- Unified color definitions (and changed a couple to be easier to read, especially in the device summary page)
- Fixed how some of the text was being injected into the template to not contain a bunch of (conveniently invisible) \ns (that is, the actual text \n was in the document, not as newlines)
- Diff page no longer shows the "pass" and "identical" sections if it's in fails_only mode

chore(scripting): add support for creating pointer events in scripts (#10968) 2daf848d0a

fix(unreal): Several fixes for unreal (#10963) 5a321f1807
* added setter methods for properties

* made lists a reference. unsettle artboard in a bunch of places that needed it.

* made lists references. Removed field notify value from lists.

* added context menu entry for cleaning generated classes

* started implementing clean function

* added clean context menu entry for cleaning up duplicate blueprint types

* attempting to make list manipulation more stable

* re arranged how view models work

* rebase error

* now properly removes handle even if objects goes out of scope

* uneeded header and clang format

* more uneeded header

* missing check

* added unit test for getHandleForInstance

* addresed pr  comments

* pr comments

* missing semi colon

* clang-format

refactor(renderer): move gamma correction logic to atomic resolve. (#10966) b9471b7d2a
* updated unreal msaa shaders to use new includes

* moved gamma convert to be at end instead of begining

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-11-11 15:35:29 +00:00
HayesGordon
fbe806ad10 fix(flutter): ref FileAsset and add dispose with finalizer (#10918) 6b091f8286
* fix(flutter): ref FileAsset and add dispose with finalizer

* chore(flutter): update out of band example disposing

* chore(flutter): early clean assets on decode

* fix(flutter): assetLoader check 0 on web not null

feature: rev to latest luau (#10960) ac8e6c591e

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-11-03 17:51:57 +00:00
HayesGordon
417151726c fix(flutter): add isTickerActive to better track animations (#10820) f2c28d32d0
* fix(flutter): add isTickerActive to better track animations

* refactor(rive_native): layout and first paint

feature: add to path (#10961) 1607b4d220

feature(scripting): expose pointer events (#10958) d571f01f6e

feat(unreal): basic rhi msaa support (#10926) a2fcd46df8
* Started adding msaa mode to rhi

* initial state msaa working on d3d12

* Now set stencil ref via set pipeline state

* set stencil in correct location

* vulkan msaa working for non advanced blend in rhi

* fixed missing check for msaa

* proper merge msaa and fix advanced blend for atomics

* added COALESCED_PLS_RESOLVE_AND_TRANSFER permutation and added better shader compile exclusions

* Now uses coalesce resolve

* base msaa working in d3d12 rhi

* mac support for non advanced blend msaa

* finally wokring on both dx12 and vulkan

* seperated out splitting render passes by a platform feature flag

* better name

* merge master

* some odd typo

* better matrix compare

* better comment

* glsl syntax fix

* removed commented code

* removed is matrix function in favor of all() as per PR comment

* factored out modify shader as a subcless

* updated cvar variable

* fix typo

* followed PR comments

* more pr comments

* clip planes actually do work now

* removed FixedFunctionColorOutput variable in favor of the flush desc member var

* fixed type restrictions and clang format

* improved comment and added missed file from last commit

* revert factoring common code because it was causing several errors

* factored out common shader code

* check clip plane support

* changed back to vulkan only

chore: add utf8 library for scripting (#10956) 097cdb71c3

fix: treat conditions as unmet if the state machine is not bound (#10955) 5c6dfc4b7a

feat: Implement clockwise mode using the interlock in Vulkan (#10951) 9903c18b2e
Pretty straight-forward implementation.

On Intel this is showing speedups in the 1.2-1.6x range (over atomic
mode, and depending on content).

fix: require order causing a crash (#10953) fd749cce47

feature: add word joiners support (#10908) 937778bd8d

feature: add support for quantization and speed controls on nested artboards (#10839) 96e8debf43
feature: add support for quantization and speed controls on state machines

feature: add scripted nodes! (#10949) 6a61e45ac0

fix: no crash if bindableProperty is nullptr (#10944) 45400d8398

chore: add more scripted converter features (#10939) 5f3da40291

fix: fp16 precision issue in clockwise rendering (#10940) 1a7500295d
We were using an epsilon that became 0 in fp16. Bump it to a nonzero,
non-denormalized fp16 value.

fix(Vulkan): Various Android Vulkan fixes (#10927) a7d233d7c1
Device fixes:
- Break the MSAA resolve off into a separate render subpass to resolve corruption on some Adreno devices
- Work around an issue where some early Mali drivers report Vulkan 1.1 support but are missing the allocation functions that vma is looking for
- Some of those Mali devices spew incorrect validation errors about the inability to create, say, an RGB8 texture because the maximum mipmap count is 0 (and other similar "oops we queried and got 0" errors) even though the images actually create fine. Added them to an ignore list.
- The MSAA color and depth/stencil textures are now being created with the TRANSIENT bit (this doesn't fix any known device issues but it does seem more correct)

Other improvements:
- vk_check now displays a string representation of the vulkan error instead of just its numeric value
- the abort handler on Android now also prints the stack trace (to make debugging easier)
- fiddle_context_vulkan now requests the correct width and height for image capture
- The queueImageCopy function in swapchain was not properly setting the pixel read bounds to the whole swapchain if passed an empty AABB

feat: missing Mat2D.invert to use existing Mat2D ref (#10935) a406176fa6
* feat: missing Mat2D.invert to use existing Mat2D ref

* feature: add bounds

minor scripting dogfood fixes (mat2d setters & artboard input) (#10934) a15901421d
chore: add missed setters and fix artboard inputs

feat(vk): Use the PLS transient backing resource in Vulkan (#10905) 4e366e3ddb

feature: adding scripted pointer events (#10915) 3ebf132c40
* feature: adding scripted pointer events

* chore: adding pointer event test

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-11-03 10:08:13 +00:00
HayesGordon
dbe08d425b chore(flutter): improve library loading and error messages (#10911) 8c460f7150
feature: expose width/height setter/getter for scripted artboards (#10917) d01497d380

feature(scripting): add data value color support for scripted converters (#10909) dfa19bdfbb

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-10-28 17:46:22 +00:00
HayesGordon
b45346db54 chore(flutter): publish 0.14.0-dev.13 (#10914) fa6b160f98
* chore(flutter): publish 0.14.0-dev.13

* chore(flutter): allow more versions for vector math

* chore(flutter): revert example new scale api

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-10-28 09:53:05 +00:00
HayesGordon
e973c1f273 feat(flutter): add RiveArtboardLayoutMixin for better layout and sizing (#10849) 24d5d03049
feature: expose time functions (#10916) 6b70e37991

rev to rive_luau_18 (#10901) c1e0f7b595
* rev to rive_luau_18

* fix: for change in luau

* fix: default old solver

* adding back missing files

* fix: test

* update .riv files

* chore: updated to luau 0.697

feat: Initial implementation of a clockwise rendering mode (#10897) 2fb75868b5
Add a new InterlockMode that overwrites all fill rules as clockwise and
implements the clockwise path rendering algorithm using raster ordered
PLS. The only backend to support this so far is GL with shader images,
but more will come.

Notably, when there is no advanced blend, we can set
"fixedFunctionColorOutput" and render directly to the target
framebuffer.

Performance so far looks promising, especially on Intel, but more
in-depth perf optimizations arebyet to come.

This is implemented as its own InterlockMode only to give it soak time.
Once this rendering mode is stable, we can merge it back into
"rasterOrdering" and just select draw shaders based on fill rule.

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-10-28 09:40:30 +00:00
HayesGordon
15dde57e6b chore(flutter): bump min flutter 3.27.0 and dart 3.6.0 (#10890) c17605691c
* chore(flutter): bump flutter min 3.27.0 and dart 3.6.0

* docs(flutter): update CHANGELOG

chore: add support for zero width spaces as word breakers (#10899) c804e738de
chore: add support for zero width spaces as work breakers

fix: set dataContext to nullptr when unbinding (#10898) 684c603b1a

fix(vulkan): Fix image/gradient rendering on some Android devices (#10894) d8e7fbdb7b
On some Adreno models, gradients were not properly rendering properly, due to the texture/gradient coordinates always being 0

This was caused by what appears to be a driver bug, in which doing vkUpdateDescriptorSets with multiple descriptors (in our case, updating paintData and paintAuxData in a single call) would fail to properly commit the data from the second one. We're only doing this in the one place. Separating this into two calls causes gradients and images to now display as expected.

chore(vk): Remove a redundant interlock mode from the draw pipeline key (#10887) 979c4feb82
The shader key and render pass key were both including the interlock
mode, and the pipeline key was so full that adding a new interlock mode
would overflow it. Only include the interlock mode once.

Add fire events to player (#10758) 15693e8ff1
* Add code to player

* Update player.cpp

* Update player.cpp

* Update player.cpp

* Clang format

* Update player.cpp

fix: when the artboard is checking for ancestors it should return its… (#10883) d5b8889321
fix: when the artboard is checking for ancestors it should return itself as source when it is not the instance

Add gamma texture test (#10856) e9b6d8a64e
* Add gamma texture test

* add texture gm

* Create gamma_texture.png

* Create gamma_texture.png

* Create gamma_texture.png

feat(Android): Multitouch and pointer exit support (#10848) 9bcc4a6d11
Adds multitouch and pointer exit support.

Also bumps the compile and target SDK to 36, adding `core-ktx` dependency for one method.

fix(gl): Fix a PLS regression on Oppo & Vivo (#10861) 33c9ac9f95
A recent refactor introduced an issue on Vivo Y21 and Oppo Reno 3 where
writes to pixel local storage got disabled when the color mask was off.
Just leave the color mask enabled in EXT_shader_pixel_local_storage
mode.

chore: add support for assigning dynamically loaded images from listeners (#10857) 8df6209168

feat: Merge fragment shaders for atlas blits & image meshes (#10852) 9794d81296
Previously we were trying to shoehorn atlas blits into
draw_raster_order_path.frag, which led to a lot of hard-to-read #ifdefs
since they're so different from paths. In reality, atlas blits are more
similar to image meshes -- both are just triangle meshes that render
directly without having to work out winding numbers -- so handle them in
draw_raster_order_mesh.frag instead (which we renamed from
draw_raster_order_image_mesh.frag).

Additionally, for MSAA, the draws are all so similar that we can just
merge them all into a common "draw_msaa_object.frag" shader.

add drag event type support (#10807) 2f4ec0a570
* add drag event type support

fix(build): Correct tracking of intended target OS in premake (#10853) c7a0379ab3
We've been testing _TARGET_OS in a lot of places in our build, but that is not actually updated in Android/Emscripten builds (it would continue to report, say, Windows). Among other things, this meant that we would build D3D12 shaders for every Android build, even though they were not needed.

This adds a `rive_target_os` value to `rive_build_config.lua` which is updated manually for those two projects, so that scripts won't do the Windows/mac things when building for android/emscripten on those platforms.

fix(vk, android) Workaround for Vulkan driver pipeline linking issues (#10756) 39741ac0c8
* Workaround for Android 9/10 Adreno 5- and 6-series Vulkan driver bug

There's a bug in some of the early Adreno drivers where some of the Rive shaders will fail to compile due to hitting an internal limit. The workaround is to run a shader compilation pre-pass to inline functions before embedding the compiled shaders into the runtime.

fix(runtime): Address issues requiring double advance (#10842) 5dd872763b
This PR removes the double advanceAndApply(0) when running goldens. There were 3 seperate issues that are resolved here.

NestedInput values which were keyed on a timeline did not take effect until the next frame when they were used to drive a Blend state. Fix: NestedArtboards and ArtboardComponentLists should check if needsAdvance() in addition to tryChangeState()
Layouts where positionType (absolute/relative) were keyed on a timeline were behaving inconsistently depending on whether positionLeft/positionTop were also keyed on the same frame. Fix: Make sure changing positionType only overrides the positionTop/positionLeft values if those were not keyed on the same frame as positionType
Text follow path modifier was rendering incorrectly in a specific case where a Text's width was bound to a VM property which gets its value from a Path's length. Fix: Call updateDataBinds before returning in Artboard::updatePass

Fix path extraction (#10823) 76a19909c5
* Update contour_measure.cpp

* Update trim_test.cpp

* Update trim_test.cpp

* Update contour_measure.cpp

* clang format

* Update contour_measure.cpp

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-10-24 16:29:03 +00:00
HayesGordon
91812e7aa4 chore(flutter): release 0.14.0-dev.12 (#10841) c2b83f625a
* chore(flutter): release 0.14.0-dev.12

* docs: update changelog

feature: add support for pausing nested artboards (#10833) 0a3cb5ac3e
* feature: add support for pausing nested artboards

feat: Scripted Enum (#10829) 650a980d41
Adds support for ScriptedEnums (ViewModel enums). This PR does not include enums as Inputs, that will follow subsequently

refactor(renderer): Generalize fixedFunctionColorOutput (#10813) 396c65832e
* refactor(renderer): Generalize fixedFunctionColorOutput

Previously, fixedFunctionColorOutput was called
"atomicFixedFunctionColorOutput" and only applied to atomic mode.
Generalize it so it also applies to msaa, and will be compatible with
clockwise rendering in the near future.

* made build in unreal

feature: add scroll threshold (#10824) 284c801953

fix(renderer): Fix outputs in the shader Makefile (#10822) 53bc4a7cbb

feat: Scripted Boolean (#10804) cb93fbb138
Adds support for scripted booleans and boolean inputs.

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-10-21 08:18:07 +00:00
HayesGordon
49baf479ea fix(flutter): prevent negative texture sizes (#10818) c4d91c9290
* fix(flutter): ensure the desired width and height scale is never negative resulting in unbounded texture sizes

* chore(flutter): assert texture width and height is greater or equal to 0

feat: Add PLS backings to the RenderContext resource manager (#10793) 2fe0021c07
Before this change, renderer backends were responsible for allocating
any textures or buffers required to back pixel local storage data. They
all did this by allocating separate backings for each render target,
which is wasteful on systems with multiple render targets.

This change adds PLS backings to the RenderContext's resource tracking
system, and allocates one global PLS backing with the dimensions of the
largest recent render targets. For now, only GL is updated to take
advantage of this resource, but other backends should follow soon.

It also merges the transient PLS backings into a single logical
TEXTURE_2D_ARRAY, as opposed to separate TEXTURE_2Ds. Allocating the PLS
backings in a 3D layout appears to get better cache performance on Intel
Arc GPUs.

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-10-17 16:12:54 +00:00
HayesGordon
97016ce0c4 chore(flutter): release 0.14.0-dev.11 (#10795) 4410ff9038
Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-10-16 14:39:04 +00:00
HayesGordon
006cc93767 chore(rive_native): publish 0.0.14 (#10794) 9a31b40b81
* chore(flutter): cleanup and logging

* chore(flutter): fix analyzer warnings

* chore(rive_native): publish 0.0.14

* chore: update hash.txt with new hashes

Co-authored-by: Gordon <pggordonhayes@gmail.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-10-16 13:20:37 +00:00
HayesGordon
f27f3a504d fix(flutter): android graphics memory leak (#10786) cc4af4c697
feature: add support for artboards as conditions (#10788) dd59b347fb
* feature: add support for artboards as conditions

fix: add dirt to data bind after being used on listener (#10789) 4149563244

Get the Linux unit tests building and running in the GitHub workflow (#10761) a0b890f273

Scripting support in CPP (#10685) a34d1ffe15
Get scripting working in CPP runtime. This currently only supports in editor workflow, since some additional backend pieces will be required to get it working in CPP in the runtimes.

chore: automatically bind view model trees to dependents when any of … (#10782) ae01b2a8c3
* chore: automatically bind view model trees to dependents when any of its children view models is replaced

fix(runtime): Font weight layout measure fix (#10766) 0ae985862d
With certain fonts, the expected font features/variations aren't available until a frame after the text is measured, so for example, we measure glyphs using its default weight rather than the weight set in the style, which causes the rendered text not to fit within the measured area, thus incorrectly wrap to the next line. This fix updates variable fonts whenever TextStyle::font() is called IF the variable font hasn't previously been cached.

Specifically this issue was reproducible when using Solos to toggle between components which had text wrapped in layouts.

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-10-16 10:51:34 +00:00
HayesGordon
4b5c4c3530 chore(flutter): release 0.14.0-dev.10 (#10768) 10cf7f0a12
fix: interpolator in cpp runtime (#10752) 01c1b43af9
* fix: interpolator in cpp runtime

feat(gl): Add scissor to GLState (#10748) a3f6433c00
Start tracking scissor state and use it to limit our clear bounds for
pixel local storage backing.

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-10-14 12:01:41 +00:00
HayesGordon
36f0638fe0 fix(rive_native): front called on empty vector (#10706) 35953858c3
* fix(rive_native): front called on empty vector

* Update packages/runtime/src/animation/animation_reset.cpp

feature: scripted converters (#10711) a40f07ee54

feat(Unreal) Mac RHI Atomics (#10753) 50e69c8fde
* Added metal rhi support.

fix: handle duplicate data binds on export and on clone (#10751) cd11dd2e60
fix: handle duplicate data binds on export and on clone to avoid inconsistencies

fix(unreal): Sometimes would draw black when should be transparent. (#10747) 64f8da473b
fixed advanved blend being black when artboard is transparent

fix(runtime): Invalidate stroke effects on ForegroundLayoutDrawable (#10733) 2f7bed5eb1

fix: keep unprocessed data binds until they are consumed (#10732) f4b36c2d03

refactor: Start splitting shaders into separate files (#10698) b73733a052
* refactor: Start splitting shaders into separate files

The draw shaders are getting unruly with #defines all over the place.
Before we can add more, we need to clean these up a little. This PR
splits out the fragment portions of raster ordered and msaa shaders into
separate files. This also required teaching minify.py to handle .vert and
.frag files.

* apply_frag_coverage

* fixwebgpu

* unreal

* fixmetalagain

* formats

* oops

* rm draw_image_mesh.glsl

feat: Add a mechanism to select the integrated GPU on Windows (#10713) 986c92af9a

Add mip map lod bias and bilinear types (#10701) 608fb2781f
* Add mip map lod bias and bilinear types

* minor updates

* Removed MAX enums

* Added Image Mesh LOD Bias

* Add metal support

* Add VK support

* WebGPU filter

* Remove lodbias from metal

* clang format

* clang format

* turn off bilinear on GL as a test

* Remove trilinear and miplodbias from sampler states

* Moved miplodbias into shader instructions

* removed trilinear from webgpu

* clang the shaders

* Update image_filter_options.cpp

* fix missing $ in metal.glsl

* fix lua WRT trilinear

* fix missing flushuniforms in metal.glsl for image draw

* Remove lodbias from FRAG_DATA_MAIN

* fix #define

* Update rive_lua_libs.cpp

* Update metal.glsl

* Removed lodbias from image mesh as a test

* Update atomic_draw.glsl

* Update draw_image_mesh.glsl

* Fix unit tests

* Remove whitespace

* Update draw_image_mesh.glsl

* Update image_sampler.hpp

* Update bindings_c2d.cpp

* clang format

* Update render_context_d3d_impl.cpp

* Readd lodbias to draw image mesh

* Update glsl.glsl

* Update draw_image_mesh.glsl

* Update glsl

* Update glsl.glsl

* Update glsl.glsl

* Update glsl.glsl

* Update rhi.glsl

* more lodbias removal

* more lodbias removal

* Update glsl.glsl

* Update glsl.glsl

* Update glsl.glsl

* Remove one image call lodbias

* Update glsl.glsl

* Update glsl.glsl

* Update glsl.glsl

* Update glsl.glsl

* Update glsl.glsl

* Update draw_image_mesh.glsl

* clang format

* Update hlsl.glsl

* Update metal.glsl

* Update rhi.glsl

* clang format

* Update Goldens

* update golden

* more goldens

* Test for metal

* goldens

* metal test fix

* Update gpu.cpp

* revert changes

* Update gpu.cpp

* Update linux golden

* Metal test

* metal test

* Update gpu.cpp

* Update gpu.cpp

* clang format and ios goldens

* Update goldesn

* linux goldens

* move mipmaplodbias in uniforms

* Addres Chris' comments

* More comments addressed

* clang format

Restructure Vulkan bootstrapping (#10721) 9c66afdd2a
This redoes the Vulkan bootstrapping used by our test apps to use our own internal bootstrapping (rather than VkBootstrap), as well as fixes swapchain issues with a subtly incorrect use of fences.

cpp(fix): Update scroll friction at edges (#10719) 36a2a4b4db

fix: cache and reset pointer events (#10707) fd286173b1
* fix: cache and reset pointer events

fix: Check for nullptr in Axis::offsetChanged (#10708) d79a44ba26

Ue fixes (#10705) e6ba6e329a
* Added custom draw function to render targets. Made saving on reimports for rivs not crash. Made generating blueprints 5.6 compatable

* view models now unsettle the state machine.

* now command q gets the view model type name for properties. UE also uses stores this information

* made viewModelProperty work with slashes.

* undo slash support

* removed test slash vm from data_bind_test_cmdq and updated unit tests to match

* updated draw commands

* better saving without crash

* automatic defaults are now working

* don't generate enums every noade. Make them inside the file and cache them.

* make enums public to allow referencing in blueprints

* removed defaults ready delegate

* removed unused class

* PR changes

* missed

Co-authored-by: Gordon <pggordonhayes@gmail.com>
Co-authored-by: hernan <hernan@rive.app>
2025-10-13 17:54:27 +00:00
HayesGordon
06fbd5af03 fix(flutter): background graphic visibility (#10699) df9e89998b
* fix(flutter): ensure graphic undergoes update after backgrounding

* docs(flutter): update CHANGELOG

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-10-02 19:13:06 +00:00
lancesnider
693a7a6366 chore(flutter): update layout example (#10694) cf7006283c
Co-authored-by: Lance Snider <lance@lancesnider.com>
2025-10-02 16:39:31 +00:00
HayesGordon
6da3205de4 feat(flutter): add multitouch support (#10688) d5e74de08c
fix(vulkan): Correctly support Vulkan 1.0 on Android (#10679) 8e0fadf978
VkBootstrap will incorrecty error with `vulkan_version_1_1_unavailable` on Vulkan 1.0 systems that do not have the vkEnumerateInstanceVersion function, even when we specifically said that it was fine to fall back to 1.0. To work around this, we will detect that error and then try again to create the Vulkan instance, specifically requesting version 1.0.

Additionally fix a "function must return" error when building in MSVC on Windows, and update LOG_ERROR to be LOG_ERROR_LINE to make it clear that it writes lines (and update its use of fprintf to match what the android logging does)

chore: Rename draw_clockwise_* shaders to draw_clockwise_atomic_* (#10689) 7e676124de
The interlock mode these shaders implement is clockwiseAtomic. Let's be
more specific with the naming so we can support other clockwise modes.

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-10-02 11:59:27 +00:00
HayesGordon
bc2f8e8d53 chore: publish 0.14.0-dev.9 (#10691) 2f8251e8b9
Feature: add support for multitouch (#9581) 12764e9a3b
add support for multitouch

feature: add toggle to make scroll constraint not interactive (#10680) 0b069a9936
* feature: add toggle to make scroll constraint not interactive

chore: improve iteration of data bound list (#10625) 8385ec62ed
improve iteration of data bound list

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-10-01 18:15:21 +00:00
HayesGordon
48e6a77fc1 refactor(flutter)!: scaling with dpr on Rive Renderer (#10645) 1f5e950a28
* refactor!(flutter): scaling with dpr on Rive Renderer

* refactor(flutter)!: render object texture creation and paint

* chore(editor): fix dragon login mouse follow

* docs(flutter): update CHANGELOG

* feat(flutter): apply transform scaling on RivePanel

* chore(flutter): remove repaint boundary to fix goldens

data bind artboards rcp file (#10214) c542b9b7ac
* make file ref counted

* migrate File to refcnt

* add bindable artboard class to keep file reference

* feat(unity): support rcp file and BindableArtboard class (#10228)

* refactor(apple): use updated file bindable artboard apis (#10229)

* update command queue to support bindable artboards

* use bindable artboards on command queue

* self manage view model instances in js runtime

* change remaining viewModelInstanceRuntimes to rcp

* refactor(apple): update view model instances to use rcp (#10298)

* refactor(unity): support rcp ViewModelInstanceRuntime (#10309)

* rebase fix

* deprecate getArtboard in favor of getBindableArtboard

* fix merge

* remove unused lambda capture

* fix rive binding

* feat(Android): RCP File, VMI, and add bindable artboards (#10456)

* refactor: C++ refactors

- Import from long (incorrect) -> jlong
- Header clang-tidy fix
- Use reinterpret_cast instead of C-style cast
- Break out some variables instead of long one liners
- Use auto
- Remove unused env and thisObj

# Conflicts:
#	packages/runtime_android/kotlin/src/main/cpp/src/helpers/general.cpp

* docs: Improve documentation on the File class

* feat: Support bindable artboard type and RCP VMIs

# Conflicts:
#	packages/runtime_android/kotlin/src/androidTest/java/app/rive/runtime/kotlin/core/RiveDataBindingTest.kt

* feat: Support RCP files

* refactor: Change from +1/-1 ref to just release

* fix: Moved to the more appropriate null pointer for GetStringUTFChars

* replace unref with release

test: Add an android_gms_vulkan run to browserstack (#10669) f7613dbf35
Vulkan is ready to stabilize. Let's get it on our nightly runs.

Also disable "atomic" mode on Android unless requested explicitly.
Barriers tend to be expensive on Android and MSAA is usually cheap;
let's stabilize MSAA first.

fix(vk): Properly preserve render targets when using MSAA (#10630) 5df1a42463
* fix(vk): Properly preserve render targets when using MSAA

Unfortunately, Vulkan does not provide a mechanism to initialize our
(transient) MSAA texture with the contents of the (non-MSAA)
renderTarget texture at the beginning of a render pass. To work around
this limitation while supporting LoadAction::preserveRenderTarget, we
literally draw the previous render target contents into the framebuffer
at the beginning of the pass.

* Fix one more barrier

fix(vk, d3d12): Properly apply draw batch barriers on pipeline failures (#10667) 5efb71a88a
If a pipeline failed to acquire for a draw batch that required barriers of any kind, we were skipping the barriers as well as attempting to draw.
Now the code will apply the barriers and only skip drawing.

chore: add pointer exit support (#10595) d999d6a22c
* add pointer exit support

scripting: color and string view model property (#10663) 3acbdfcba7
Description
Adds support for passing a string and color vm property to the scripting engine.
Adds support for defining color and string as inputs.

feat: Integrate glfw into the premake build (#10656) 653c8c6040
Build GLFW with premake instead of requiring the user to call out into a
custom script thatbuses their cmake.

feat(scripting): split code panels (#10655) 9d8b49152e
* feature(scripting): command palette

* feature: adding split pane saving

* chore: update to latest luau

* fix: pixel correct scrollbars

* feature: reload scroll position of script pane

* feature: module titles on panes

* chore: merging command palettes

* fix: cleanup

* chore: refactor searchbar tests

* fix: failing test

* chore: cleanup

* chore: cleanup

* chore: cleanup unused commented code

* feature: hover for command palette items

* chore: cleanup mocks

Fix MSVC toolchain path_fiddle builds (#10661) 0f0d7c5f81
Our MSVC builds are building with C++latest (instead of C++17), and what that means is that filesystem::path::u8string returns a std::u8string instead of std::string (see https://en.cppreference.com/w/cpp/filesystem/path/string.html), causing a compilation failure for the shader hotload rebuild command. This change adds back in the reinterpret_cast to a char pointer (but still stores the temp string correctly).

Add loop option to GM (#10649) 0121fd0174
* add loopCount

* add static

* Update gmmain.cpp

* Change while to for

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-09-30 15:24:48 +00:00
HayesGordon
b6becf197e feat(flutter): add AdvanceRequest to force advance/draw updates (#10558) 5466e81cc8
feat: add AdvanceRequest

Fix dangling pointer in pathfiddle (#10654) 439848a8d9
Fix dangling pointer

feat: Web/android testing tweaks and features (#10621) 8cd4d40440
And add a "webserverandroid" target to deploy_tests.py that sets
up reverse port forwarding over ADB so we don't have to rely on the
network.

fix(vulkan): get MSAA working on systems without ClipDistance support (#10624) d1c02a29aa
Referencing ClipDistance (via gl_ClipDistance) in a SPIR-V shader, even if it is in a specialization branch that is not taken, is a validation error on systems that don't support ClipDistance. To get around this, there are now noclipdistance variations of the shaders that use it, and they (along with the MSAA shaders that never use ClipDistance) all define `DISABLE_CLIP_RECT_FOR_VULKAN_MSAA`, which ensures that it never tries to compile it in except where it matters.

fix: path_fiddle now shuts down without crashing on Vulkan (#10631) 4d3770866f
The order of destroying the vulkan device and destroying all of the assets in the riv data was backwards - a loaded riv scene needs to be fully destructed before the Vulkan fiddle context can be, otherwise you'll get validation failures on fiddle context destruction (Because there are still buffers held by things in the artboards) or, if validation is off, crashes when trying to destroy the buffers using a now-defunct vulkan context.

Use markHostTransformDirty instead of markHostingLayoutDirty when appropriate (#10632) af3f673d77
Address a couple of issues:

When an artboard has a host, at the time the artboard has a layout marked dirty, we mark the hosting layout dirty (if it is a LayoutNodeProvider such as a NestedArtboardLayout or ArtboardComponentList). In cases where the host is not a LayoutNodeProvider (ie, NestedArtboardLeaf) we should also mark the host's transform dirty so it can redraw itself using the Artboard's updated size. This surfaced recently when we started using the artboard's hugged size with NestedArtboardLeaf mode.
In Artboard xChanged/yChanged we should mark the host's transform dirty rather than marking layout dirty (because we don't want to recompute layout at that time).

feature: make override properties bindable (#10627) 540fab92b6

fix(webgpu): Fix Y orientation on GL zero and nonzero FBOs (#10623) 454b0d2db1

Add `--core` command-line option to path_fiddle (#10619) ec8b00c206
This also improves its parameter validation.

fix: link rml and then rive for rml cli (#10620) 48b39fe42e

(fix): Artboard list item hit order (#10618) f95ef8fdc5
Since Artboard list items are rendered with z index increasing as the item index increases (ie, later children will sit above earlier children), when doing hit testing, we need to traverse the items in reverse order in order to capture the property z ordering. This is only important when items have overlap.

Add asynchronous shader and pipeline creation to Vulkan renderer (#10591) 3b6e2b6bc4
This gets the Vulkan runtime running with the async pipeline manager.

This required moving a bunch of the internal render context impl classes up to the header, which made the header a bit unwieldy so they got moved out to their own files.

Additionally, this has some changes to the async pipeline manager:
- Vulkan's pipelines have additional information that the other renders' do not, so PipelineProps is now a property of the pipeline type so that it can have its own pipeline type
- Similarly, Vulkan uses a 64-bit index for its pipeline key (so that it can use 32 bits of it as the standard shader key) so that had to be generalized as well
- Moved the vertex shader manager functionality into the pipeline manager because every pipeline should share vertex shaders
- Generalized it so that vulkan can also use it to share other things. This includes fragment shaders which are now managed as shared like vertex shaders were, because on Vulkan multiple pipelines can share the same fragment shader.
- Changed the std::maps to std::unordered_map because the lookup speed should be better (it's a hash map vs. a binary tree)

chore: Add start/end/offset properties to List follow path (#10606) b2aed6839d
Adds distinct start, end and offset properties for List's follow path as requested by Creative team, to behave similarly to Trim paths. This also fixes an issue where modifying strength wouldn't modify its rotation accordingly.

fix(UAT): listener with triggers work correctly (#10614) c42858eb74

feature(scripting): artboard:advance should return boolean (#10582) 665b84f01d

Add silvers for follow path (previously rive_flutter goldens) (#10611) 67f20bfc31
Noticed that the old rive_flutter goldens were removed. With some updates to follow path coming with List follow path, I wanted to make sure those old goldens were captured as silvers prior to the new changes landing. We may want to go back and covert the other goldens in the future.

Exclude items from scroll snap if hidden (#10602) 0704ed0f7e
When items contained in a scroll constraint's layout are scrolled with snapping enabled, we exclude the hidden items from the snap list so they will not be settled on when the user swipes.

chore: compare previous list to new list (#10604) 9072781123
* compare previous list to new list

feature: prioritize viewmodel direction from flag (#10514) 4d8e0a9719
* prioritize viewmodel direction from flag

feat(webgpu): Wagyu 39 (#10603) 7ac418480c

feat(wgpu): Add a wgpu backend to the test suite (#10586) 48bb6538bd

fix: Vulkan validation on desktop (#10600) 7220599bb1
Don't build the Vulkan instance until after we've enabled validation.

Add profiler Tag macro (#10593) 859d6283c9
Update profiler_macros.h

Some vulkan testing fixes (#10597) 21af6591da
- deploy_tests on windows should use `where` which is built in (vs `which` which is not)
- vk bootstrap now displays shaderClipDistance, which was missing from the printing of available features
- vkcore and vksrgb backends now do the correct thing
- added vkmsaacore backend (which currently fails due to a validation error)

fix: target to source converter (#10584) 9366e9acea
* feature: add support for color interpolation in converter

* fix: target to source with different types with converter applied

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-09-25 08:18:23 +00:00
HayesGordon
1b323fec22 chore(flutter): publish 0.14.0-dev.8 (#10590) b5106d68af
Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-09-15 16:07:10 +00:00
HayesGordon
bc1b5794f7 chore(flutter): release 0.14.0-dev.7 (#10578) 32dc890302
* chore(flutter): release 0.14.0-dev.7

* chore: hotfix rive_native hash

fix(webgpu): Revert the pls2 workaround for PowerVR 1.10 (#10585) fa6ac73d94
This workaround came with an unacceptable performance cost. Let's revert
while we work out a better solution.

fix(gl): Apply ANGLE workarounds in WebGL as well (#10581) 1931264636

feature: add support for color interpolation in converter (#10545) b0f6516eec
* feature: add support for color interpolation in converter

Fix D3D warning (#10580) a3e22e1322
* Always set sampler even if no texture

* Add scope block to sampler setting

* remove empty line

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-09-15 07:37:56 +00:00
HayesGordon
b2e6c044de chore(rive_native): release v0.0.10 (#10576) d542dbee56
* chore(rive_native): release v0.0.10

* chore(rive_native): bump release

* docs: grammar CHANGELOG

* chore: update hash.txt with new hashes

feature: scripting prevent infinite exec (#10570) 3afebf3d4f
* feature: working on fullscreen code

* feature(scripting): prevent infinite execution

* fix: missing method for ScriptingTest context

fix(gl): Only do memory barrier workarounds on Mali (#10575) 8494dda792
fix(gl): Only do memory barrier workarouns on Mali

We introduced a spurious memory barrier per flush in order to work
around corruption on Mali-G78. But ironically, this barrier introduced
corruption on Adreno 610. Add some logic to only do the barrier on
Mali.

Co-authored-by: Gordon <pggordonhayes@gmail.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-12 18:17:31 +00:00
HayesGordon
72c64a849f feat(flutter): expose component local bounds (#10571) 8165c5c216
Fix endcap flickering bug (#10547) 1421e05aaa
* Detect close to zero or zero length segments and move to the next

* Change method to fix paths with duplicate points

* Added const back

* clang format

fix(gl): Re-enable pls on ARM (#10569) 8f9cdd5cec
PLS is quite stable at this point on ARM. Let's aim for a more gradual
transition to our end goal of an all-MSAA GL.

fix(gl): Add missing barriers for feathering with image atomics (#10565) 7e8588484d
Also turn image atomics off on Adreno since the barriers didn't fix it
on 660 on 642L, and they still don't draw anything.

fix(gl): Workaround an ARM MSAA synchronization issue (#10568) 848415ed2f
Various Android vendors experience synchronization issues with multiple
flushes per frame. We used to call glFlush every Rive flush on Qualcomm
for this reason. Remove the 'if' and just call glFlush for everyone.

Also call glMemoryBarrier for everyone ES 3.1+ at the end of the flush.
In particular, ARM Mali-G78 needs this barrier in conjunction with a
glFlush to ensure a resolve of EXT_multisampled_render_to_texture. (Note
that the spec says these resolves should all be implicit and automatic.)

fix(apple): better release and null checking on fallback fonts (#10562) e0baf4e1fa
* fix(apple): do not use symbolic trait font copy on failure

* fix(apple): release ctfont copy

* refactor(apple): do not manually ref rcp'd font, remove cache

editor(fix): Fix children collapsed issue when showing/hiding layout (#10566) 15a6eedc71
A layout's collapsed value wasn't being propagated down the tree which resulted in issues if a parent was set to display, but a child layout was set to hidden, it would not hide its contents properly.

fix(gl): Drop EXT_shader_pixel_local_storage (#10556) 8df4ac1a56
This extension has been an ever-flowing fountain of bugs for us,
especially on PowerVR. Furthermore, it doesn't even work on Pixel 10
(PowerVR D-Series DXT-48-1536).

Let's de-fragment our Android GL renderer and consolidate everything on
MSAA (except for old PowerVR devices where MSAA doesn't work). MSAA is
hopefully a more tried-and-true, less bug-prone rendering mode in the
Android ecosystem anyway, and it's nice to be more consistent across
devices.

The perf story looks positive. On PowerVR, MSAA seems to be generally
faster. On ARM it's always been a mixed bag depending on content.

Either way, this is a nice approach to switch GL to maintenance mode so
we can go all in on Vulkan.

NOTE: We are still keeping EXT_shader_pixel_local_storage as a fallback
for the feather atlas on devices that don't support float rendering.
There are real GPUs where this is our only way to get high quality
feathers.

Add high level shader debugging for RenderDoc debugging (#10550) 46e6f66b94
* Initial commit

* clang format

* Added RIVE_RAW_SHADERS #define and now use this in D3D Debug mode

* Merge if statements

fix(Unreal): Updated UE plugin to no longer do deprecated things (#10555) c799a27dfd
* Remove use of `FRHIResourceCreateInfo` which is now deprecated
* Updated to c++20 because that is the new requirement for UE
* Fixed a bug where the state machine name selection would cause a crash if no state machines are in riv file.
* No longer use raw pointers as `TObjectPtr` are preferred now
* Fixed bug where `#ifdef WITH_RIVE_TOOLS` was missing in `FrameOptions` declaration

Add keyboard toggle to PathFiddle to run updates at fixed 120fps or unlocked (#10548) 576b235996
* Initial commit

* Update to using variable timesteps rather than fixed

Expose localBounds in CPP (#10537) 0ed12de980
Implement some missing localBounds methods in CPP on core objects that expose this. Basically ported over from Dart. This was requested in order for the new rive_native Flutter runtime to provide a similar API to the legacy Flutter runtime.

More profiling markers to runtime (#10549) e58f44d5ec

feature: Scripting Revision Manager (#10474) 3cdbce02cb
* hydrogen pane uses codefile

* feature: reworking theme

* feature: working on scrolling panels

* fix: missed files

* chore: removing print statements

* feature: implement CodeFileView

* fix: opening linked files starting to add vertical split options

* fix: missed file

* feature(hydrogen): splittable panels

* fix: not advancing state machines from scripts

* fix: warning

* fix: data_tree_instance_test

fix: GL async shader compilation improvements/fixes (#10544) 2d7b1b788f
This improves the handling of GL parallel shader compile and the ubershader fallback, centered around fixing the Galaxy S22 goldens

- GL ubershaders needed to not set ENABLE_CLIP_RECT in MSAA mode when missing the EXT_clip_cull_distance extension
- avoidMaxShaderCompilerThreadsKHR is no longer necessary because the extension is actually working as expected
- Similarly an explicit null check on glMaxShaderCompilerThreadsKHR is no longer necessary because the Android egl extension function loading code already does so
- The recommended way to use KHR_parallel_shader_compile is to compile the shaders, then start the link, then wait on the link to finish (and then display compilation errors after that if compilation failed). This simplifies the compilation handling
- There was an assert in tryGetPipeline that was intended as a "this should be impossible" test but it turns out it is possible (when the ubershader had completed, but errored), so now on an ubershader error case we will return nullptr (and let the renderer not draw) rather than assert

fix(gl): Reinstate the pls2 workaround for PowerVR drivers < 1.13 (#10524) dd4dd9f326

feature: add support for different random modes (#10538) dab3b5994d
* feature: add support for different random modes

fix(ios):fix a metal API validation error on iOS simulator. (#10539) 5d0cf127b2
* fix(ios):fix a metal API validation error in sim.

When running on the simulator, we run in atomics mode. In this mode, we weren't binding the clip plane buffer properly.

Rml initial work (#10542) 199af78f1e
* feature: adding rml compiler

* chore: fixing multi fields missing

* chore: cleanup

* chore: updating to latest master

* chore: allowing saving rml

* sorting items correctly

* hiding unnecessary xml props

* stripping unnecessary ids

* chore: add missed files

* chore: adding missed files

* add serializer to rev

* fractional index

* list id types

* include non runtime objects on export

* more rml

* sort root nodes

* add flags support

* fixes

* add parenting to definitions

* fix id clash

* skip computed values

* add full parentable support

* fix bit flags

* fix keyframes

* add interpolators as children

* support multiple parented objects

* handle duplicate parent

* cli

* add rml docker

* clang format

* add support for new properties in core definition

* restore initial values of json

fix(runtime): force keep going on 0 advanceAndApply (#10504) 0152183944
* fix(runtime): force keep going on 0 advanceAndApply

* Update packages/runtime/src/animation/state_machine_instance.cpp

WebGPU: Added way to pass WGPUCommandEncoder to RenderContextWebGPUImpl::flush() function (#10530) b5a50b8118
* WebGPU: Added way to pass WGPUCommandEncoder to RenderContextWebGPUImpl::flush() function

* chrisfixes

fix: Update image texture usages for wagyu mipmap generation (#10529) 65829bc47a
* Add src usage as generateMipMaps blits

* ifdef

wagyu 38 (#10528) f03e236489

fix(gl): Validate GL extension functions load before using them (#10526) 300809d5bf
It is possible that Android GL drivers report an extension as being present, but the extension functions actually are not. This validates that we get valid pointers for any extension (and turn off trying to use the extension if we cannot).

fix(gl): Fix rendering issues on Xiaomi Watch models (#10527) 8a0dbb9c80
the GL_EXT_clip_cull_distance extension shader code was using a feature of GL_EXT_shader_io_blocks, which was not otherwise being required by the shader. This use has now been removed.

During an attempt to work around some driver issues on an ANGLE device, glsl.glsl was changed to use the EXT_shader_io_blocks extension (which we are otherwise not using) to specify a set number of clip planes for EXT_clip_cull_distance. However, the workaround ended up removing support for EXT_clip_cull_distance in ANGLE and WebGL so the glsl.glsl change was no longer necessary.

More recently, developers on a couple Xiaomi Watch devices discovered a rendering issue, which stemmed from the use of GL_EXT_shader_io_blocks functionality without having required it in the shader code. Rather than add the #extension line to do so, since this use of that functionality isn't currently solving any known issues, it seems better to just remove the shader_io_blocks usage and let the GPU/driver set the clip plane count itself.

fix(gl): Limit the tess/grad instance counts on Mali/PowerVR (#10520) b0646c5c97
fix(gl): Limit the tess/grad instance conts on Mali/PowerVR

Limit the number of instances we draw at a time when rendering the
tessellation and gradient textures. PowerVR and ARM GPUs have been known
to crash when rendering large instance counts. We're already limiting
the instance counts for main draws, but we missed the tessellation and
gradient passes when we added this workaround.

restore skipping data bind values (#10516) 049120501f

fix(gl): Remove EXT_shader_pixel_local_storage2 workarounds (#10519) 84075d7989
We discovered a workaround on older PowerVR devices that involved
enabling EXT_shader_pixel_local_storage2. It seemed safe enough, but it
is responsible for rendering and perf regressions. Just quit using pls2
altogether.

Also disable GL_CULL_FACE when initializing and resolving pixel local
storage. Leaving it on is just one more possible bug to crop up if we
get the wrong face, and if we do get it wrong it's hard to debug because
everything disappears.

fix: Work around a PowerVR GLSL compiler bug (#10518) 6062012b6a
The PowerVR compiler was (and still is) evaluating both sides of a
ternary expression. Rewrite the code to expect this and be safe.

fix: Tag RIVE in NSLogs (#10510) ce87aac5e0

fix: revert skipping collapsed data bound properties (#10507) fba405c288
* fix: revert skipping collapsed data bound properties

fix(ios): Don't call abort when the unexpected happens. (#10472) 1adc508ecd
* removed aborts and properly handle the error case instead. Don't use printf because nslog allows for proper output to log files in ios

* more converts to nslog

* made checks more specific

* Wiring up multiple synthesized failure types

* Wiring through the new synthesized failure modes to D3D11, 12, and GL

* Move the Metal ubershaderLoad failure synthesis to a better spot

* clang format

* Missed wrapping a variable in #ifdef WITH_RIVE_TOOLS

* Correction: missed *multiple* #ifdef WITH_RIVE_TOOLSes

* Still more

* Testing to see if the D3D12/GL errors are related to the ubershaderLoad synthesis or not

* Removing additional pieces of the testing to see what's causing the issues

* It's important to write your preprocessor directives correctly 🙃

* Trying to figure out what the fence value is that is coming out wrong on the D3D12 tests and why GL is failing

* trying something dumb to see if this re-breaks the oneplus7

* Split the render test up into three tests to see if it is any better on the oneplus7

* Trying to see where the d3d12 device is getting removed (and why), and also what happens if I run 2 of the same synth test on oneplus7

* Sorry everyone it's effectively printf debugging time 🫤

* Changed the CreateEvent call to see if that works for D3D12 and also more printing for GL

* More

* Okay testing some other dumb stuff - this might resolve oneplus 7, still no idea on D3D12 yet

* Testing an alternate fix for the oneplus7 issue plus a different initial frame value for the copy fence

* Adding a comment before push

* Clean up the testing code (the D3D and oneplus7 issues are fixed but now there's a GL issue on windows. sigh.

* clang format again

I'm good at this lol

* Okay I think this will fix the windows GLFW issue at the cost of it might break all the android tests or something (but I hope not!)

* Now debugging why glfw window creation is failing for windows unit tests

* Okay this should "fix" the GL issues on github by just not creating a GL window if GL is not supported.

* Some minor cleanup

* Clarifying a comment, mostly to get the tests to re-kick

feature: console entry can be clicked to open script file (#10484) b555c57747
* feature: console entry can be clicked to open script file

* chore: missed files

* fix: mixed file

* fix: failing tests

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-09-12 16:28:03 +00:00
HayesGordon
ce00421de5 feat(flutter): add shared texture through rive panel (#10451) 7359e8b824
* feat(flutter): add shared texture through rive panel

* feat: updates to rive panel

* chore: revert pub path change

* docs: update api level docs

* feat: expose drawOrder

feat: Add fallback AtlasTypes that don't need float color buffers (#10475) 5e6f683b9e
Floating point color buffers are only supported via extensions in GL.
Previously, the feather atlas would just break when this functionality
wasn't present.

This PR adds support for multiple different AtlasTypes that make use of
various GL extensions to render the atlas. As a final resort, if none of
the other extensions are available, it can split coverage up into rgba8
compoments. This mode works on unextended GL at the cost of quality.

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-09-03 17:20:33 +00:00
HayesGordon
38f40c8309 feat(flutter): resart ticker on pointer event (#10479) f7f795e530
* feat(flutter): resart ticker on pointer event

* docs(flutter): update CHANGELOG

* Update packages/rive_flutter/lib/src/painters/widget_controller.dart

skip collapsed objects from running data bound values (#10476) 7868b2bb71
chore: do not run data bound properties from collapsed objects

Improve Layout display handling incorporating it with isCollapsed (#10473) 0389f47d3d
We revisited how we handle layout display changes and how they related to the collapsed dirt on a LayoutComponent:

We now override isCollapsed in LayoutComponent to take into account both the collapsed dirt that may have been propagated down from a parent AND the LayoutComponent's own display value. If the layout has collapsed dirt, it MUST have been propagated down so it takes precendence, otherwise use its own display value
We removed the need to walk up the parent tree to figure out if any layout in the hierarchy is hidden
We removed a workaround to prevent a 1 frame visual glitch. This workaround was resolved by this fix and is no longer needed.

chore: add collapse and solo test (#10471) c903296458
* chore: add collapse and solo test

Work around the Galaxy S22 rendering issue (#10468) 3dcdb47683
 Work around the S22 rendering issue

Chris figured out that this was broken with the introduction of using KHR_blend_equation_advanced (vs. the coherent one) - the S22s specifically report compatibility with it but the rendering is wrong.

To fix it, unfortunately, the best way we could think of was to (just before the first beginFrame call) do a quick test where we render some known colors with a known blend mode to a tiny texture then read the output and validate it's within a threshold. Right now the threshold is large because the actual error in practice was massive, so this works - only the S22 models trigger the "oops I can't use this" threshold and back out support.

fix: create a copy of the events list to avoid clearing immediately a… (#10461) 70108fd1a6
fix: create a copy of the events list to avoid clearing immediately added events

refactor(UnrealPlugin): Unreal Rewrite Tech Preview (#10382) d4a7f91ee5
* removed opengl renderer because it never worked anyway

* removed android check that is no longer used

* remove iriverenderer

* prepping for commandQueue

* wip

* wip

* started implementing draw loop

* wip

* now stripped down to no include rendering anywhere its not needed

* rive now attempts to render, but server is not loading ile

* wip

* wip

* started adding support for non uav render targets

* statemachines now update correctly and basic rive leaf widgets draw

* listeners now added for file and artboard

* merge master changes

* made ui draw more performent

* added todo

* added statemachine listener and settled callbacks

* added resource handling for rive handles

* Started implemetning file data in viewer

* now display data about artboards, statemachines and viewmodels. Fixed crash with resizing preview

* fixed bugs, better formating

* Properties now display correctly for URIveFile Asset Editor

* Dynamic View Model Node First implementation

* make view model nodes wip

* make artboard and make view model nodes finished

* wip viewmodels

* Generate view model blueprints

* almost finished data binding

* Unreal MVVM finished. Command Q still needs work

* integrated external images and data binding artboards in unreal

* fixed opening file details

* leaf widget now correctly uses fit and alignment. Fixed a couple of bugs

* added clip path for widget view

* cleanup, data binding finished (probably). smoother reimport. proper enum creation for blueprints.

* Error checks now work for custom bp nodes

* File now saves data instead of requesting it every time

* properly saves and loads file. Now builds for standalone

* added defaults for instances

* auto binding view models, properly holding a ref to bound view models. general cleanup

* dont subscrive to view model properties

* added SetStateMachine to URiveViewModel

* fixed delegate signature

* fixed some bugs related to output pin

* fixed a few bugs with loading / saving nodes

* properties now properly get created with signatured and notifies

* GM module now works with re-rewrite

* now get values on start.

* auto bind now uses rive descriptor

* lists working

* added way to check if you need to get defaults

* now update list size when data updated

* fix build issue

* added way to get view model properties via c++

* audio works

* made audio engine a little easier to use

* started implementing rive render target

* added shader types

* raster order shaders now link

* Now raster ordering plugged in.

* wip

* wip

* wip

* now supports render targets that don;t have render target flag.

* thumbnail renderer now works

* started implementing render target. only needs gamma correction

* removed uneeded message and test file.

* now updated render target dropdown for artboards and state machines

* Removed RiveTextureObject

* removed RiveEvent class

* raster order mode mainly works now

* better copy for back buffer

* made default clear value for back buffer transparent so it uses fast clear

* fixed color mode for render target

* dont setup on cdo's

* added srgb gamma correction

* started getting packaging working

* now packages for windows

* goldens / gms now run with rewrite

* Re added dropdown names for rive actor

* check for null handle

* now builds on mac

* removed uneeded file

* PR comments

feature: add auto generated state machine on artboard initialization (#10420) 6c147cb33f
* feature: add auto generated state machine on artboard initialization

feat: Re-enable GL_KHR_parallel_shader_compile on ANGLE (#10465) 7bf33dc199
Rather than disabling the extension entirely, we can just avoid calling
glMaxShaderCompilerThreadsKHR on these devices.

feature: adding scripted list property (#10457) 5c83e3cd4a
* feature: adding scripted list property

* fix: missed file

fix: Disable KHR_parallel_shader_compile on ANGLE (#10458) bac33a5808
Various Galaxy devices using ANGLE will crash immediately if we turn it
on, so just don't use it there.

feat: Update goldens and player to deploy in the browser (#10453) 827077b899
Set up http and websocket servers in deploy_tests.py that allow us to
communicate with the remote wasm app similarly to how we communicate
with android & ios devices. Add a "-w" target to check_golds.sh that
kicks tests off in the default browser.

Update our renderer premake vulkan version to 1.4.321 (plus another build fix) (#10452) c26e82adc9
* Update our renderer premake vulkan version to 1.4.321 (and also add a few missing RIVE_UNREACHABLEs)

Was getting build errors trying to build Vulkan relating to the vk memory allocator header noting a mismatch between the vulkan sdk being reported and the #defines in the headers, and Chris mentioned that we could just upgrade it to be 1.4 now.

Additionally, I got a couple errors in two functions that didn't return in the "default" case, which needed RIVE_UNREACHABLE() at the end like the other similar functions had.

* Rebase the pixel6 GL and Vulkan goldens

Scripted artboard inputs (#10449) 4a7bec6316
* feature: working on artboard inputs

* feature: artboard inputs

* feature: artboard input

* feature: artboards controlled by scripts

* chore: bump to latest luau

* feature: show only valid artboards

* chore: adding a test for scripted artboards

* fix: dart test

* chore: fix tests

* chore: adding missed coin.riv

* chore: fix copy ellision warnings

add support for property multiplier on vertices (#10436) 500cb42240
add support for property multiplier

Improve handling of Yoga exceptions in editor (#10438) b39218b476
Prevent Yoga related crashes in editor and expose whether a Yoga node is in an error state so we can provide a warning to the user.

Nnnnn skip properties from recording to journal (#10437) 036b51345e
* fix: add non recording propeties to json defintion

feat: add support to format numbers with commas (#10445) cf47b03e54
* feat: add support to format numbers with commas

Don't perform shape AABB hit tests when walking up parent tree (#10444) d8beb0c4ea
This PR skips parent shape AABB tests when hittesting components. There was an issue following recent updates to walk up parent tree when performing hit tests which would prevent objects nested inside shapes from being hit due to trying to AABB test the parent shapes in cases where the shape had no path or the path did not overlap with the listening component.

chore: unwrap rive::File for rive_native (#10442) 1fa625f5c9
* chore: unwrap rive::File for rive_native

* chore: fix wasm binding

feature: making rive::File rcp (#10439) 213f07ec13
* feature: making rive::File rcp

* fixes

* fix: recorder

Add background draw shader loading to GL, D3D11, and D3D12 (#10388) c681049169
This adds AsyncPipelineStateManager to the render code, which handles the background processing of draw shader creation (not, at the moment, other shader types...there's no reason those couldn't be added as well, but this seemed the biggest target).

    If a given shader has not been compiled yet, we will fall back on an ubershader version with all features enabled
        the ubershader version will be compiled synchronously if it does not exist yet
    For the D3Ds, this is done with a background thread that compiles the shaders.
    GL, however, does not seem to play nice with background threading shader creation. But what it does have is the KHR_parallel_shader_compile extension, which basically lets the driver create threads in the background and thread the shader compilation.
        The shader manager, in this case, needs to poll the completion state every time the shader is requested and potentially push the compilation along to the next stage (i.e. once linkProgram has completed, then we can do the rest of our setup)
        If KHR_parallel_shader_compile is not supported (for instance, with WebGL on Firefox) then shader compilation will just happen synchronously (I could not find a clear way to thread the GL shader creation, but I would happily add it as a fallback if there is a way)

This change also updates our GLAD loader to version 2.0.8 (from 0.1.36!), which had some API changes.

Add shaders to SLN for renderer (#10435) 5188bbb7b1
* Add shaders to SLN for renderer

* Clang format

Add headers to premake lua files (#10434) b7038e078d
* Add headers to premake lua files

feat(webgpu): Add support for the webgpu2 API (#10423) f27cb54942
Also update wagyu extensions.

Artboard List items follow path (#10417) 68a608cfad
Adds support for list items to be rendered on a path when a Follow Path constraint is applied to the Artboard list. Currently, the items will be evenly spaced on the path between 0 and Distance (which is set on the Follow path constraint). For example, with Distance set to 100%, items will be spaced between the start and end of the path. With Distance set to 50%, items will be spaced between the start and half the distance (length) of the path.

feat: Bump clang-format to v19 (#10429) 270034cbcd

feature: add support for list based paths (#10409) fb374dcad4
* feature: add support for list based paths

fix: skip pad conversion if text is empty (#10418) b00368b1c4

feat(unreal android): Get build settings and goldens to build for unreal (#10413) 625123dbae
* updated build script to look for android sdk unreal expects

* proper platform settings for unreal android

* made check golds work with unreal android

Runtime profiler base (#10391) 4171e09f80
* Add profiling macros and optick profiler

* Update premake5_optick.lua

* Added more profiling markers

* Remove microprofiler option for now as not implemented

* Added more markers ro rendering code

* Update Optick build premake only for windows builds

* More build file changes for optick with windows

* Change how optick is built on windows

* Update premake5_v2.lua

* Update build files to use with_optick option

* Added ScopeName macro to appease ASAN

* Push to rekick jobs

* Delete ProfilerMacros.h

* Create profiler_macros.h

* Update path_fiddle.cpp

* Update fiddle_context.hpp

* Update for rename of header

* More header changes

* Update fiddle_context.hpp

* Update profiler_macros.h

* Update for clang format

* Update fiddle_context.hpp

* Update profiler_macros.h

* Update profiler_macros.h

* Changed premake values on Chris' comments

* Removed multiple define fro RIVE_OPTICK and now in rive_build_config.lua

* Added Optick URL and Version to rive_build_config

feature: hydrogen search improvements (#10412) f6d5d55b26
* feature: command+g/shift+command+g to find next/prev

* feature: add command+d to select word occurences

* fix: warning

* chore: cleanup

feature: add support for trigger properties from scripted viewmodels (#10399) ec342c1e4d
* feature: add support for trigger properties from scripted viewmodels

* fix: memory usage test

* feature: adding trigger as an input

* chore: fix warnings

* feature: allow calling trigger fire() from scripts

feat(gl): Start using the EXT_shader_pixel_local_storage2 API (#10410) b16a5e5d70
This avoids a fullscreen draw to initialize PLS (when the v2 extension
available), and also works around an issue of corruption on PowerVR
Rogue GE8300.

Respect hug with all nested artboard and artboard list types (#10403) 7f3ed82d57
A customer requested feature, previously when using node or leaf type nested artboards, we would always render using the fixed artboard size (even if the artboard was set to hug). This modifies the behavior so that if the Artboard is set to hug, we respect that. This also applies to the newly implemented artboard lists when not in layout mode.

fix(webgpu): Make sure PLS resolve triangles don't get culled (#10397) ef5760d69c

feature: ability to unload/unregister a module (#10395) 9e2f6211d7
* feature: ability to unload/unregister a module

* feature: complete implementation into rive_native

Add support for non-layout constrained Artboard Lists (#10384) 520e01a0f2
This PR adds support for Artboard List items that can be positioned directly using DataBinding by binding to the x & y property values of the Artboard itself. Currently, the behavior is that if the artboard list is a child of a layout, it will apply layout rules, but if its a child of a group or solo, it will allow control of its position through binding.

feat: add to number converter (#10390) 4d835a3637
 add to number converter

Feature: print statements + console (#10375) 81ddf4d6ee

fix: use word joiner instead of line separator for breaks (#10381) cd13ab364d
* fix: use word joiner instead of line separator for breaks

* fix: whitespace detection bug

make value bindable for rounded numbers (#10379) 891f1f5d81
make value bindable

fix: trigger adds dirt to listeners only when it is not reset (#10377) 760472b069

fix: Always use WGPUWagyuShaderLanguage_GLSLRAW on Wagyu/GLES (#10372) 0cc0b7e63c
Rive shaders tend to be long and prone to vendor bugs in the compiler.
Always send down the raw Rive GLSL sources when running on Wagyu/GLES,
which have various workarounds for known issues and are tested
regularly.

feature: add support for vertical alignment on text with ellipsis (#10365) 33ec7249cd
add support for vertical alignment on text with ellipsis

Co-authored-by: Gordon <pggordonhayes@gmail.com>
Co-authored-by: hernan <hernan@rive.app>
2025-09-02 18:02:32 +00:00
HayesGordon
d8d2bf2fc9 chore(rive_flutter): release 0.14.0-dev.6 (#10364) afc58acd82
* chore(rive_native): remove unneeded files for pub publish

* chore(rive_flutter): release 014.0-dev.6

Nnnnn add datatypes to viewmodel instances (#10357) 3b0e14f50f
* feature: add data types to instance runtime values
* fix: validate type when returned from cache

Fix race condition in Metal background shader compiler (#10355) 92de3f0a1a
* Fix race condition in Metal background shader compiler

Setting an atomic variable outside of a std::condition_variable's corresponding mutex and then notifying the condition_variable has a subtle race condition, and the ordering of operations looks like this:

Thread A: acquire mutex
Thread A: check m_shouldQuit // it's false
Thread B: m_shouldQuit = true
Thread B: m_workAddedCondition.notify_all() // nothing is currently waiting on it so this does nothing
Thread A: m_workAddedCondition.wait() // now it's waiting, having just missed the above notification

Now thread A will wait forever because no more notifies to the condition_variable are coming and, in the case of this code, the call to m_compilerThread.join() will also wait forever (since the thread will never quit), so shutting down the renderer will never finish.

Instead, m_shouldQuit should only be set to true while in the mutex (because the check of its value and the subsequent .wait call also happen within the mutex, so this prevents them interleaving). This change fixes this.

* Minor formatting adjustment to make the github workflow tests re-run

feat(RiveRenderer): Gamma Space Conversion (#10361) a61202f1c4
* Added conversion from gamma to linear space for situations where we can't control what our render target format is

* comment update

Guard against percent margins on top level artboards (#10356) aef45767df
We need to prevent percent margin from being set on Artboards because percent margin relies on the layout parent's dimensions. Since an Artboard has no parent, it results in an error within Yoga and a crash.

Feature: scripted data inputs (#10339) 8693175cee
* chore: reworking inputs and properties

* chore: syncing rive_native fixes

* feature: adding script input parameters

* feature: adding listeners

* chore: missed files

* feature: add/remove listeners

* chore: updating to latest luau

* chore: fix tests & colliding names

* fix: missing import

* chore: fix warnings

* feature: guard against change during iteration

* chore: fix boolean warning

* fix: handle error reports from builtin types

make more constraint values bindable (#10351) 9674376769

feature: add support for custom enum properties (#10345) 21b8ce84f4
* feature: add enum custom property support

fix: Work around a bug in the Mali T720 compiler (#10340) 59aa55b5d0

fix: treat artboard as layout for hit testing inheritance (#10341) 583274d7b9
* fix: treat artboard as layout for hit testing inheritance

feature: add support for firing triggers on state transitions (#10329) cc34f96631
* feature: add support for fiiring triggers on state transitions

add support to data bind solos by index and name (#10337) 64f828c9a2

Support for Triggers in Custom property groups (#10322) 9af6af0361
Adds support for Triggers in Custom Property Groups. This will allow triggers to be keyframed, which can also be bound to ViewModel triggers. Currently an event has to be fired on the timeline in order to fire a ViewModel trigger via a listener.

Update unit test build/run scripts to use build_rive.sh (#10320) 4bd8c63b93
* Update unit test scripts to use build_rive.sh

The unit test test.bat and test.sh were doing their own ad-hoc building instead of using build_rive.  This updates test.sh to call build_rive.sh for the build. This script could probably be pared down further but I did not want to break any of the existing command line arguments that people are probably using.

Additionally, test.bat did not have up-to-date build flags in it, so now it does a similar Windows development environment setup to build_rive.bat and then calls directly into test.sh, so it won't get out of sync with the main script anymore.

* Additional test.sh changes

- There was a block of code that I could have removed but didn't (made redundant by the call to build_rive)
- Add build_rive's parent directory to the path before calling it (will fix the test failing on Linux)
- Removed the `sh` before build_rive.sh as it does not need to be shell invoked.

* The pr_unit_tests.yaml execution for Mac needed to do a clean furing the asan build

because it had already done a build without asan before, the change to build_rive means that we now catch the premake parameter change (adding asan), and so clean needs to happen for that build to be correct.

* For now, move the build_rive.sh call into the two branches that previously had the build calls (linux, for instance, does not build, which seems incorrect given the github workflow is trying to run it.

* Adding a note to test.sh to describe why the build_rive script is called in the way it is (vs. the obvious way)

* Additional unit test script fixes (unifying windows build further, and some warnings)

- Add the ability to specify a toolset on the command line (i.e. "--toolset=msc") that will get passed along to build_rive (thus making the 'clang' toolset in the windows build only a default)
- Update the unit_test_windows and unit_test_windows_msvc entries in the github unit test workflows to call test.bat now (which required combining the build/run steps, but this matches all the other configurations)
- Also added some additional parameter validation, mainly warnings on ignored/unsupported parameters

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-08-13 08:51:30 +00:00
HayesGordon
df684394c6 fix(rive_native): incorrect key forwarding to child widgets (#10314) 4c4a564f0f
* fix(rive_native): incorrect key forwarding to child widgets

* docs: update CHANGELOG

fix nested events conflicting with parent events (#10326) 51f1f66e31

add support for view model trigger based listeners (#10323) e7ef71b568

add advanced phase to render loop (#10318) af18705be2
* add reset phase to render loop

support setting bindable artboard from data bind (#10317) 559f237078

Prevent pointer events when interacting with scroll view (#10251) 40592c7963
Currently, when items are inside a scroll view, when the scroll view is dragged and released, the item's click event will still trigger its listener if the same item is hovered. This adds a way to disable pointer events. In this implementation, when a scroll drag begins, we set the GestureClickPhase to disabled which prevents clicks from being captured.

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-08-07 14:21:28 +00:00
HayesGordon
f912fb8ce2 fix(rive_native): add missing pointer exit events (#10303) 5d09b68e12
fix: WebGPU housekeeping (#10313) 210c1fd176
Updating premake introduced a couple issues. Fix them and add a windows
webgpu builder to CI. Also move wagyu extension wrangling down into the
core webgpu renderer so individual clients don't have to think about it.

chore: Update rive_native to use build_rive.sh (#10290) 5d511c6c4c
We just had to update premake5, so now is a good time to finish
consolidating around build_rive.sh.

feature: ViewModel scripted definitions (#10301) 5678d967c7
* feature: system generated code

* working on input viewmodels/enums

* missed files

* fix: autocomplete with old solver

* fix: report types in autocomplete

* add property path solver

* chore: adding nested artboard databind test

* feature: use property solver for scripted inputs

* chore: cleanup

* chore: fix analysis warnings

* chore: missed file

* chore: fixing warnings

* fix test

chore: Update audio_preview_generator to use build_rive.sh (#10285) fba1987016
chore: Update audio_preview_generator to use build_rive.sh

Let's keep our premake setup & building all in one place.
Also update peon_audio_worker Dockerfile.

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-08-05 16:50:18 +00:00
HayesGordon
25df3e0b0b chore(rive_flutter): release 0.14.0-dev.5 (#10292) bc0ea0478d
* chore(rive_flutter): release 0.14.0-dev.5

* chore: update CHANGELOG

build: Fix premake5 build on macOS Sequoia (#10263) b4298b861b
It looks like the premake5 "v5.0.0-beta3" tag isn't compatible with
Sequoia 15.4.1. Bump our tag to v5.0.0-beta7 and update the deprecated
features we had been using.

Also fix the script to rebuild if the premake5 binary doesn't exist.
Before it only checked if the parent "premake-core" directory existed,
so if a build had failed previously, build_rive.sh would fail forever
without ever attempting to build premake5 again.

fix(apple): copy symbolic traits when using core text fallback (#10260) f9b4941afd

feature: script inputs (#10267) 3d15aeda55
* feature: detection of implemented type arguments

* fixing highlight of type union

* feature: custom properties

* feature: working on scripted properties refactor

* feature: working on inputs and outputs

* chore: working on crash

* fix: fixes crash issue with luau

* feat: working on inputs

* chore: allow using old solver

* chore: missed json file

* chore: missing files & cleanup

* chore: missed sriv file

* chore: fixing unused var

* chore: fix read not supported with old solver, and core collision

* fix: use different script update flag

build: Clone dependencies with git instead of downloading a zip (#10271) a2e64c0505
It was a cool idea to download the repos as a zip, so that premake
didn't have to rely on any external dependencies, but github was
frequently giving us a successful download of an empty zip file. This
was causing daily flakes on CI.

Instead, just invoke 'git clone --depth=1 --branch ...' from premake.
This should hopefully be more reliable, and it seems safe enough to
depend on git being installed in the environment we're on.

Also:

* Update the dependencies that were using raw branch SHAs to point to
  official tags. 'git clone --branch' requires an official tag, and this
  will be more stable anyway.

* Rename the dependency directories to "owner_project_tag" rather than a
  hash. Sometimes we need to poke around in those directories to debug
  issues, and it's easier to figure out what's what with descriptive
  names.

Fix silver test (#10272) 45e1b18c68
An improperly setup unit test using silvers was causing ASAN to throw an error.

feat: add support for computed root transform values (#10257) 375455bd73
* feat: add support for computed root transform values

library: support databinding images, list, list index, and artboards (#10252) fc868b380b
Description
We can already publish view model images, lists, list indices, artboards. Now we just need to handle them on the host file client side, which is what this PR does.

Details
The main part of this PR is that it changes the runtime_exporter. I've bit the bullet and sorted the file assets instead of using recursion. I've always wanted to export them iteratively instead of recursively but now I'm forced to add a 'preprocess' stage to exporting, so there's finally a good reason to do it.

About preprocessing. Imagine databinding Artboards. Any library file needs to be able to bind to any host/library Artboard. This means, the library file needs to export a vm instance whose value can be any library's Artboard, without necessarily needing to have that library in an asset. In preprocessing, we first calculate all the Artboards' indices that should exist in runtime (without writing them). Then at write time, the vm instance value can be accurately mapped to any Artboard's ID.

Same idea goes for fileAsset indices in preprocessing. Tho honestly, we probably just need to preprocess the host's file assets, since the UI only allows you to bind to the host's assets.

Same idea for lists in preprocessing. At write time, an instance's list property value need to refer to any view model+instance from any file, regardless on if it depends on that file as a LibraryAsset.

Demo: https://2dimensions.slack.com/archives/C07M7DQL4F2/p1753414266031969

add support to clear data bound artboard by setting the value to null (#10254) a5a679a966

Co-authored-by: Gordon <pggordonhayes@gmail.com>
2025-08-01 13:04:57 +00:00