From c552be2f04d38fa901499a1525873e79f58513e0 Mon Sep 17 00:00:00 2001 From: James Ball Date: Tue, 18 May 2021 19:32:49 +0100 Subject: [PATCH] Selectively flush frames on settings update to make rotation smoother --- src/main/java/sh/ball/audio/FrameProducer.java | 6 ++++-- src/main/java/sh/ball/gui/Controller.java | 11 +++++++---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/main/java/sh/ball/audio/FrameProducer.java b/src/main/java/sh/ball/audio/FrameProducer.java index 8e4de61..0664eb2 100644 --- a/src/main/java/sh/ball/audio/FrameProducer.java +++ b/src/main/java/sh/ball/audio/FrameProducer.java @@ -24,8 +24,10 @@ public class FrameProducer implements Runnable { running = false; } - public Object setFrameSettings(Object settings) { - renderer.flushFrames(); + public Object setFrameSettings(Object settings, boolean flushFrames) { + if (flushFrames) { + renderer.flushFrames(); + } return frames.setFrameSettings(settings); } } diff --git a/src/main/java/sh/ball/gui/Controller.java b/src/main/java/sh/ball/gui/Controller.java index a8f122c..8939ad0 100644 --- a/src/main/java/sh/ball/gui/Controller.java +++ b/src/main/java/sh/ball/gui/Controller.java @@ -171,7 +171,7 @@ public class Controller implements Initializable { tryParse(cameraXTextField.getText()), tryParse(cameraYTextField.getText()), tryParse(cameraZTextField.getText()) - ))); + )), true); cameraXTextField.textProperty().addListener(cameraPosUpdate); cameraYTextField.textProperty().addListener(cameraPosUpdate); @@ -182,7 +182,7 @@ public class Controller implements Initializable { tryParse(rotateXTextField.getText()), tryParse(rotateYTextField.getText()), tryParse(rotateZTextField.getText()) - ), null)); + ), null), false); rotateXTextField.textProperty().addListener(rotateUpdate); rotateYTextField.textProperty().addListener(rotateUpdate); @@ -219,14 +219,17 @@ public class Controller implements Initializable { } private void setFocalLength(double focalLength) { - Vector3 pos = (Vector3) producer.setFrameSettings(new ObjFrameSettings(focalLength)); + Vector3 pos = (Vector3) producer.setFrameSettings(new ObjFrameSettings(focalLength), true); cameraXTextField.setText(String.valueOf(pos.getX())); cameraYTextField.setText(String.valueOf(pos.getY())); cameraZTextField.setText(String.valueOf(pos.getZ())); } private void setObjectRotateSpeed(double rotateSpeed) { - producer.setFrameSettings(new ObjFrameSettings(null, (Math.exp(3 * rotateSpeed) - 1) / 50)); + producer.setFrameSettings( + new ObjFrameSettings(null, (Math.exp(3 * rotateSpeed) - 1) / 50), + false + ); } private double tryParse(String value) {