Selectively flush frames on settings update to make rotation smoother

pull/35/head
James Ball 2021-05-18 19:32:49 +01:00
rodzic 04dc9cb868
commit c552be2f04
2 zmienionych plików z 11 dodań i 6 usunięć

Wyświetl plik

@ -24,8 +24,10 @@ public class FrameProducer<T> implements Runnable {
running = false; running = false;
} }
public Object setFrameSettings(Object settings) { public Object setFrameSettings(Object settings, boolean flushFrames) {
if (flushFrames) {
renderer.flushFrames(); renderer.flushFrames();
}
return frames.setFrameSettings(settings); return frames.setFrameSettings(settings);
} }
} }

Wyświetl plik

@ -171,7 +171,7 @@ public class Controller implements Initializable {
tryParse(cameraXTextField.getText()), tryParse(cameraXTextField.getText()),
tryParse(cameraYTextField.getText()), tryParse(cameraYTextField.getText()),
tryParse(cameraZTextField.getText()) tryParse(cameraZTextField.getText())
))); )), true);
cameraXTextField.textProperty().addListener(cameraPosUpdate); cameraXTextField.textProperty().addListener(cameraPosUpdate);
cameraYTextField.textProperty().addListener(cameraPosUpdate); cameraYTextField.textProperty().addListener(cameraPosUpdate);
@ -182,7 +182,7 @@ public class Controller implements Initializable {
tryParse(rotateXTextField.getText()), tryParse(rotateXTextField.getText()),
tryParse(rotateYTextField.getText()), tryParse(rotateYTextField.getText()),
tryParse(rotateZTextField.getText()) tryParse(rotateZTextField.getText())
), null)); ), null), false);
rotateXTextField.textProperty().addListener(rotateUpdate); rotateXTextField.textProperty().addListener(rotateUpdate);
rotateYTextField.textProperty().addListener(rotateUpdate); rotateYTextField.textProperty().addListener(rotateUpdate);
@ -219,14 +219,17 @@ public class Controller implements Initializable {
} }
private void setFocalLength(double focalLength) { 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())); cameraXTextField.setText(String.valueOf(pos.getX()));
cameraYTextField.setText(String.valueOf(pos.getY())); cameraYTextField.setText(String.valueOf(pos.getY()));
cameraZTextField.setText(String.valueOf(pos.getZ())); cameraZTextField.setText(String.valueOf(pos.getZ()));
} }
private void setObjectRotateSpeed(double rotateSpeed) { 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) { private double tryParse(String value) {