summaryrefslogtreecommitdiffstats
path: root/scene/3d/camera_3d.h
diff options
context:
space:
mode:
Diffstat (limited to 'scene/3d/camera_3d.h')
-rw-r--r--scene/3d/camera_3d.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/scene/3d/camera_3d.h b/scene/3d/camera_3d.h
index dbf2ffc1dd..3e9f940ad6 100644
--- a/scene/3d/camera_3d.h
+++ b/scene/3d/camera_3d.h
@@ -98,7 +98,39 @@ private:
RID pyramid_shape;
Vector<Vector3> pyramid_shape_points;
+ ///////////////////////////////////////////////////////
+ // INTERPOLATION FUNCTIONS
+ void _physics_interpolation_ensure_transform_calculated(bool p_force = false) const;
+ void _physics_interpolation_ensure_data_flipped();
+
+ // These can be set by derived Camera3Ds, if they wish to do processing
+ // (while still allowing physics interpolation to function).
+ bool _desired_process_internal = false;
+ bool _desired_physics_process_internal = false;
+
+ mutable struct InterpolationData {
+ Transform3D xform_curr;
+ Transform3D xform_prev;
+ Transform3D xform_interpolated;
+ Transform3D camera_xform_interpolated; // After modification according to camera type.
+ uint32_t last_update_physics_tick = 0;
+ uint32_t last_update_frame = UINT32_MAX;
+ } _interpolation_data;
+
+ void _update_process_mode();
+
protected:
+ // Use from derived classes to set process modes instead of setting directly.
+ // This is because physics interpolation may need to request process modes additionally.
+ void set_desired_process_modes(bool p_process_internal, bool p_physics_process_internal);
+
+ // Opportunity for derived classes to interpolate extra attributes.
+ virtual void physics_interpolation_flip_data() {}
+
+ virtual void _physics_interpolated_changed() override;
+ virtual Transform3D _get_adjusted_camera_transform(const Transform3D &p_xform) const;
+ ///////////////////////////////////////////////////////
+
void _update_camera();
virtual void _request_camera_update();
void _update_camera_mode();