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;
}
double _msPerFrame = 1000.0 / 60.0;
///
///
///
double get msPerFrame {
return _msPerFrame;
}
///
///
///
@override
Future setFrameRate(int framerate) async {
final interval = 1000.0 / framerate;
set_frame_interval_render_thread(_viewer!, interval);
_msPerFrame = 1000.0 / framerate;
set_frame_interval_render_thread(_viewer!, _msPerFrame);
}
final _onDispose = <Future Function()>[];

View File

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

View File

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