瀏覽代碼

Merge pull request #60763 from lawnjelly/fti_physics_flush

Rémi Verschelde 3 年之前
父節點
當前提交
13bb7c6c35
共有 4 個文件被更改,包括 12 次插入0 次删除
  1. 1 0
      core/os/main_loop.h
  2. 2 0
      main/main.cpp
  3. 8 0
      scene/main/scene_tree.cpp
  4. 1 0
      scene/main/scene_tree.h

+ 1 - 0
core/os/main_loop.h

@@ -68,6 +68,7 @@ public:
 
 	virtual void init();
 	virtual bool iteration(float p_time);
+	virtual void iteration_end() {}
 	virtual bool idle(float p_time);
 	virtual void finish();
 

+ 2 - 0
main/main.cpp

@@ -2257,6 +2257,8 @@ bool Main::iteration() {
 
 		message_queue->flush();
 
+		OS::get_singleton()->get_main_loop()->iteration_end();
+
 		physics_process_ticks = MAX(physics_process_ticks, OS::get_singleton()->get_ticks_usec() - physics_begin); // keep the largest one for reference
 		physics_process_max = MAX(OS::get_singleton()->get_ticks_usec() - physics_begin, physics_process_max);
 		Engine::get_singleton()->_physics_frames++;

+ 8 - 0
scene/main/scene_tree.cpp

@@ -525,6 +525,14 @@ void SceneTree::client_physics_interpolation_remove_spatial(SelfList<Spatial> *p
 	_client_physics_interpolation._spatials_list.remove(p_elem);
 }
 
+void SceneTree::iteration_end() {
+	// When physics interpolation is active, we want all pending transforms
+	// to be flushed to the VisualServer before finishing a physics tick.
+	if (_physics_interpolation_enabled) {
+		flush_transform_notifications();
+	}
+}
+
 bool SceneTree::iteration(float p_time) {
 	root_lock++;
 

+ 1 - 0
scene/main/scene_tree.h

@@ -306,6 +306,7 @@ public:
 	virtual void init();
 
 	virtual bool iteration(float p_time);
+	virtual void iteration_end();
 	virtual bool idle(float p_time);
 
 	virtual void finish();