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;
}
public Object setFrameSettings(Object settings) {
renderer.flushFrames();
public Object setFrameSettings(Object settings, boolean flushFrames) {
if (flushFrames) {
renderer.flushFrames();
}
return frames.setFrameSettings(settings);
}
}

Wyświetl plik

@ -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) {