internal: use msPerFrame to control render timing

This commit is contained in:
Nick Fisher
2025-01-09 17:03:41 +08:00
parent 30060578ef
commit 61abed2fb7
3 changed files with 17 additions and 3 deletions

View File

@@ -262,13 +262,22 @@ class ThermionViewerFFI extends ThermionViewer {
return out; return out;
} }
double _msPerFrame = 1000.0 / 60.0;
///
///
///
double get msPerFrame {
return _msPerFrame;
}
/// ///
/// ///
/// ///
@override @override
Future setFrameRate(int framerate) async { Future setFrameRate(int framerate) async {
final interval = 1000.0 / framerate; _msPerFrame = 1000.0 / framerate;
set_frame_interval_render_thread(_viewer!, interval); set_frame_interval_render_thread(_viewer!, _msPerFrame);
} }
final _onDispose = <Future Function()>[]; final _onDispose = <Future Function()>[];

View File

@@ -98,6 +98,11 @@ abstract class ThermionViewer {
/// ///
Future<View> getViewAt(int index); Future<View> getViewAt(int index);
///
///
///
double get msPerFrame;
/// ///
/// Sets the framerate for continuous rendering when [setRendering] is enabled. /// Sets the framerate for continuous rendering when [setRendering] is enabled.
/// ///

View File

@@ -148,7 +148,7 @@ class _ThermionTextureWidgetState extends State<ThermionTextureWidget> {
if (!mounted) { if (!mounted) {
return; return;
} }
if (widget.viewer.rendering && !_rendering && _resizing.isEmpty) { if (widget.viewer.rendering && !_rendering && _resizing.isEmpty && (d.inMilliseconds - lastRender > widget.viewer.frameRateInMilliseconds)) {
_rendering = true; _rendering = true;
if (this == _states.first && _texture != null) { if (this == _states.first && _texture != null) {
await widget.viewer.requestFrame(); await widget.viewer.requestFrame();