You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I have confirmed the issue is present in the latest version of the rive Flutter package
I have searched the documentation and forums and could not find an answer
I have searched existing issues and this is not a duplicate
Description
Rive native currently flickers a lot when resizing on macOS. Here's a quick win PR to improve (though not completely fix) the situation: knopp/rive_native#1 .
Before:
resize-before.mov
After:
resize-after.mov
It's still flickers, but it doesn't freeze for longer periods of time. It is not a complete fix. Complete fix would include:
Creating the texture synchronously. Currently the texture is created asynchronously through platform channel. This adds enough latency where it can delay frames during resizing. The call can be replaced with synchronous FFI invocation.
Not using [FlutterTextureRegistry textureFrameAvailable]. This method is meant for situation where rendering is driven completely outside of flutter. That is not the case here. Ideally Rive should render to texture in platform thread and then immediately provide the texture when raster thread requests it (copyPixelBuffer). Obviously it's not so easy, because we currently don't have good way to synchronize Rive rendering with raster thread. We could hold raster thread until Rive Metal completion handler is called, but we don't really want to unnecessary delay CPU work for GPU. The real solution would be to extend external texture API in Flutter to include fences.
Submission checklist
riveFlutter packageDescription
Rive native currently flickers a lot when resizing on macOS. Here's a quick win PR to improve (though not completely fix) the situation: knopp/rive_native#1 .
Before:
resize-before.mov
After:
resize-after.mov
It's still flickers, but it doesn't freeze for longer periods of time. It is not a complete fix. Complete fix would include:
Creating the texture synchronously. Currently the texture is created asynchronously through platform channel. This adds enough latency where it can delay frames during resizing. The call can be replaced with synchronous FFI invocation.
Not using
[FlutterTextureRegistry textureFrameAvailable]. This method is meant for situation where rendering is driven completely outside of flutter. That is not the case here. Ideally Rive should render to texture in platform thread and then immediately provide the texture when raster thread requests it (copyPixelBuffer). Obviously it's not so easy, because we currently don't have good way to synchronize Rive rendering with raster thread. We could hold raster thread until Rive Metal completion handler is called, but we don't really want to unnecessary delay CPU work for GPU. The real solution would be to extend external texture API in Flutter to include fences.Reproduction steps / code
No response
Upload your reproduction files / stack trace
No response
Source
.riv/.revfileNo response
Screenshots / video
No response
Rive Flutter package version
0.1.6
Flutter version
Flutter 3.44.0-1.0.pre-162 • channel [user-branch] • [email protected]:knopp/flutter.git
Framework • revision b14d6e3c93 (4 days ago) • 2026-04-21 16:21:40 +0200
Engine • hash f891d7e38b44e0a784f98ad39b8513aff66ba754 (revision 2844af6a71) (6 days ago) •
2026-04-19 07:03:37.000Z
Tools • Dart 3.13.0 (build 3.13.0-34.0.dev) • DevTools 2.57.0
Device
macOS
OS version
Any
Additional context
No response