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

This commit is contained in:
Dario 2025-10-16 13:47:18 -03:00
parent 20430236e7
commit af584b1ba8
2 changed files with 7 additions and 4 deletions

View file

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

View file

@ -1587,7 +1587,7 @@ public:
void _execute_frame(bool p_present); void _execute_frame(bool p_present);
void _stall_for_frame(uint32_t p_frame); void _stall_for_frame(uint32_t p_frame);
void _stall_for_previous_frames(); 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> template <typename T>
void _free_rids(T &p_owner, const char *p_type); void _free_rids(T &p_owner, const char *p_type);