Преглед изворни кода

Do not begin a new frame during RenderingDevice's shutdown.

Dario пре 2 месеци
родитељ
комит
af584b1ba8
2 измењених фајлова са 7 додато и 4 уклоњено
  1. 6 3
      servers/rendering/rendering_device.cpp
  2. 1 1
      servers/rendering/rendering_device.h

+ 6 - 3
servers/rendering/rendering_device.cpp

@@ -6584,11 +6584,14 @@ void RenderingDevice::_stall_for_previous_frames() {
 	}
 }
 
-void RenderingDevice::_flush_and_stall_for_all_frames() {
+void RenderingDevice::_flush_and_stall_for_all_frames(bool p_begin_frame) {
 	_stall_for_previous_frames();
 	_end_frame();
 	_execute_frame(false);
-	_begin_frame();
+
+	if (p_begin_frame) {
+		_begin_frame();
+	}
 }
 
 Error RenderingDevice::initialize(RenderingContextDriver *p_context, DisplayServer::WindowID p_main_window) {
@@ -7086,7 +7089,7 @@ void RenderingDevice::finalize() {
 
 	if (!frames.is_empty()) {
 		// Wait for all frames to have finished rendering.
-		_flush_and_stall_for_all_frames();
+		_flush_and_stall_for_all_frames(false);
 	}
 
 	// Wait for transfer workers to finish.

+ 1 - 1
servers/rendering/rendering_device.h

@@ -1587,7 +1587,7 @@ public:
 	void _execute_frame(bool p_present);
 	void _stall_for_frame(uint32_t p_frame);
 	void _stall_for_previous_frames();
-	void _flush_and_stall_for_all_frames();
+	void _flush_and_stall_for_all_frames(bool p_begin_frame = true);
 
 	template <typename T>
 	void _free_rids(T &p_owner, const char *p_type);