You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
Fixed Timestep Interpolation (2D)
Adds fixed timestep interpolation to the rendering server (2D only). Switchable on and off with a project setting (default is off). Co-authored-by: lawnjelly <lawnjelly@gmail.com>
This commit is contained in:
@@ -271,6 +271,10 @@ public:
|
||||
void canvas_item_set_debug_redraw(bool p_enabled);
|
||||
bool canvas_item_get_debug_redraw() const;
|
||||
|
||||
void canvas_item_set_interpolated(RID p_item, bool p_interpolated);
|
||||
void canvas_item_reset_physics_interpolation(RID p_item);
|
||||
void canvas_item_transform_physics_interpolation(RID p_item, const Transform2D &p_transform);
|
||||
|
||||
RID canvas_light_allocate();
|
||||
void canvas_light_initialize(RID p_rid);
|
||||
|
||||
@@ -297,6 +301,10 @@ public:
|
||||
void canvas_light_set_shadow_color(RID p_light, const Color &p_color);
|
||||
void canvas_light_set_shadow_smooth(RID p_light, float p_smooth);
|
||||
|
||||
void canvas_light_set_interpolated(RID p_light, bool p_interpolated);
|
||||
void canvas_light_reset_physics_interpolation(RID p_light);
|
||||
void canvas_light_transform_physics_interpolation(RID p_light, const Transform2D &p_transform);
|
||||
|
||||
RID canvas_light_occluder_allocate();
|
||||
void canvas_light_occluder_initialize(RID p_rid);
|
||||
|
||||
@@ -307,6 +315,10 @@ public:
|
||||
void canvas_light_occluder_set_transform(RID p_occluder, const Transform2D &p_xform);
|
||||
void canvas_light_occluder_set_light_mask(RID p_occluder, int p_mask);
|
||||
|
||||
void canvas_light_occluder_set_interpolated(RID p_occluder, bool p_interpolated);
|
||||
void canvas_light_occluder_reset_physics_interpolation(RID p_occluder);
|
||||
void canvas_light_occluder_transform_physics_interpolation(RID p_occluder, const Transform2D &p_transform);
|
||||
|
||||
RID canvas_occluder_polygon_allocate();
|
||||
void canvas_occluder_polygon_initialize(RID p_rid);
|
||||
|
||||
@@ -336,6 +348,32 @@ public:
|
||||
|
||||
void finalize();
|
||||
|
||||
/* INTERPOLATION */
|
||||
|
||||
void tick();
|
||||
void update_interpolation_tick(bool p_process = true);
|
||||
void set_physics_interpolation_enabled(bool p_enabled) { _interpolation_data.interpolation_enabled = p_enabled; }
|
||||
|
||||
struct InterpolationData {
|
||||
void notify_free_canvas_item(RID p_rid, RendererCanvasCull::Item &r_canvas_item);
|
||||
void notify_free_canvas_light(RID p_rid, RendererCanvasRender::Light &r_canvas_light);
|
||||
void notify_free_canvas_light_occluder(RID p_rid, RendererCanvasRender::LightOccluderInstance &r_canvas_light_occluder);
|
||||
|
||||
LocalVector<RID> canvas_item_transform_update_lists[2];
|
||||
LocalVector<RID> *canvas_item_transform_update_list_curr = &canvas_item_transform_update_lists[0];
|
||||
LocalVector<RID> *canvas_item_transform_update_list_prev = &canvas_item_transform_update_lists[1];
|
||||
|
||||
LocalVector<RID> canvas_light_transform_update_lists[2];
|
||||
LocalVector<RID> *canvas_light_transform_update_list_curr = &canvas_light_transform_update_lists[0];
|
||||
LocalVector<RID> *canvas_light_transform_update_list_prev = &canvas_light_transform_update_lists[1];
|
||||
|
||||
LocalVector<RID> canvas_light_occluder_transform_update_lists[2];
|
||||
LocalVector<RID> *canvas_light_occluder_transform_update_list_curr = &canvas_light_occluder_transform_update_lists[0];
|
||||
LocalVector<RID> *canvas_light_occluder_transform_update_list_prev = &canvas_light_occluder_transform_update_lists[1];
|
||||
|
||||
bool interpolation_enabled = false;
|
||||
} _interpolation_data;
|
||||
|
||||
RendererCanvasCull();
|
||||
~RendererCanvasCull();
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user