You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-12-02 16:48:55 +00:00
Fixed Timestep Interpolation (3D)
Adds fixed timestep interpolation to the visual server. Switchable on and off with project setting. This version does not add new API for set_transform etc, when nodes have the interpolated flag set they will always use interpolation.
This commit is contained in:
@@ -36,6 +36,18 @@ void VisualServerWrapMT::thread_exit() {
|
||||
exit.set();
|
||||
}
|
||||
|
||||
void VisualServerWrapMT::thread_scenario_tick(RID p_scenario) {
|
||||
if (!draw_pending.decrement()) {
|
||||
visual_server->scenario_tick(p_scenario);
|
||||
}
|
||||
}
|
||||
|
||||
void VisualServerWrapMT::thread_scenario_pre_draw(RID p_scenario, bool p_will_draw) {
|
||||
if (!draw_pending.decrement()) {
|
||||
visual_server->scenario_pre_draw(p_scenario, p_will_draw);
|
||||
}
|
||||
}
|
||||
|
||||
void VisualServerWrapMT::thread_draw(bool p_swap_buffers, double frame_step) {
|
||||
if (!draw_pending.decrement()) {
|
||||
visual_server->draw(p_swap_buffers, frame_step);
|
||||
@@ -82,6 +94,24 @@ void VisualServerWrapMT::sync() {
|
||||
}
|
||||
}
|
||||
|
||||
void VisualServerWrapMT::scenario_tick(RID p_scenario) {
|
||||
if (create_thread) {
|
||||
draw_pending.increment();
|
||||
command_queue.push(this, &VisualServerWrapMT::thread_scenario_tick, p_scenario);
|
||||
} else {
|
||||
visual_server->scenario_tick(p_scenario);
|
||||
}
|
||||
}
|
||||
|
||||
void VisualServerWrapMT::scenario_pre_draw(RID p_scenario, bool p_will_draw) {
|
||||
if (create_thread) {
|
||||
draw_pending.increment();
|
||||
command_queue.push(this, &VisualServerWrapMT::thread_scenario_pre_draw, p_scenario, p_will_draw);
|
||||
} else {
|
||||
visual_server->scenario_pre_draw(p_scenario, p_will_draw);
|
||||
}
|
||||
}
|
||||
|
||||
void VisualServerWrapMT::draw(bool p_swap_buffers, double frame_step) {
|
||||
if (create_thread) {
|
||||
draw_pending.increment();
|
||||
|
||||
Reference in New Issue
Block a user