mirror of
https://github.com/godotengine/godot.git
synced 2025-12-07 22:00:10 +00:00
Fix crash when using ANGLE OpenGL on Windows.
This commit is contained in:
parent
e6aa06d3de
commit
69401d6eb1
2 changed files with 21 additions and 11 deletions
|
|
@ -5814,16 +5814,16 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
|
|||
rect_changed = true;
|
||||
}
|
||||
#if defined(RD_ENABLED)
|
||||
if (window.create_completed && rendering_context && window.context_created) {
|
||||
if (window.create_completed && rendering_context && window.rendering_context_window_created) {
|
||||
// Note: Trigger resize event to update swapchains when window is minimized/restored, even if size is not changed.
|
||||
rendering_context->window_set_size(window_id, window.width, window.height);
|
||||
}
|
||||
#endif
|
||||
#if defined(GLES3_ENABLED)
|
||||
if (window.create_completed && gl_manager_native) {
|
||||
if (window.create_completed && gl_manager_native && window.gl_native_window_created) {
|
||||
gl_manager_native->window_resize(window_id, window.width, window.height);
|
||||
}
|
||||
if (window.create_completed && gl_manager_angle) {
|
||||
if (window.create_completed && gl_manager_angle && window.gl_angle_window_created) {
|
||||
gl_manager_angle->window_resize(window_id, window.width, window.height);
|
||||
}
|
||||
#endif
|
||||
|
|
@ -6632,7 +6632,7 @@ Error DisplayServerWindows::_create_rendering_context_window(WindowID p_window_i
|
|||
ERR_FAIL_COND_V_MSG(err != OK, err, vformat("Failed to create %s window.", rendering_driver));
|
||||
|
||||
rendering_context->window_set_size(p_window_id, wd.width, wd.height);
|
||||
wd.context_created = true;
|
||||
wd.rendering_context_window_created = true;
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
|
@ -6641,10 +6641,10 @@ void DisplayServerWindows::_destroy_rendering_context_window(WindowID p_window_i
|
|||
DEV_ASSERT(rendering_context != nullptr);
|
||||
|
||||
WindowData &wd = windows[p_window_id];
|
||||
DEV_ASSERT(wd.context_created);
|
||||
DEV_ASSERT(wd.rendering_context_window_created);
|
||||
|
||||
rendering_context->window_destroy(p_window_id);
|
||||
wd.context_created = false;
|
||||
wd.rendering_context_window_created = false;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
@ -6652,12 +6652,20 @@ void DisplayServerWindows::_destroy_rendering_context_window(WindowID p_window_i
|
|||
Error DisplayServerWindows::_create_gl_window(WindowID p_window_id) {
|
||||
if (gl_manager_native) {
|
||||
WindowData &wd = windows[p_window_id];
|
||||
return gl_manager_native->window_create(p_window_id, wd.hWnd, hInstance, wd.width, wd.height);
|
||||
|
||||
Error err = gl_manager_native->window_create(p_window_id, wd.hWnd, hInstance, wd.width, wd.height);
|
||||
ERR_FAIL_COND_V_MSG(err != OK, err, "Failed to create native OpenGL window.");
|
||||
|
||||
wd.gl_native_window_created = true;
|
||||
}
|
||||
|
||||
if (gl_manager_angle) {
|
||||
WindowData &wd = windows[p_window_id];
|
||||
return gl_manager_angle->window_create(p_window_id, nullptr, wd.hWnd, wd.width, wd.height);
|
||||
|
||||
Error err = gl_manager_angle->window_create(p_window_id, nullptr, wd.hWnd, wd.width, wd.height);
|
||||
ERR_FAIL_COND_V_MSG(err != OK, err, "Failed to create ANGLE OpenGL window.");
|
||||
|
||||
wd.gl_angle_window_created = true;
|
||||
}
|
||||
|
||||
return OK;
|
||||
|
|
@ -7408,7 +7416,7 @@ DisplayServerWindows::DisplayServerWindows(const String &p_rendering_driver, Win
|
|||
gl_manager_native = nullptr;
|
||||
windows.erase(MAIN_WINDOW_ID);
|
||||
r_error = ERR_UNAVAILABLE;
|
||||
ERR_FAIL_MSG("Failed to create an OpenGL window.");
|
||||
return;
|
||||
}
|
||||
RasterizerGLES3::make_current(true);
|
||||
}
|
||||
|
|
@ -7418,7 +7426,7 @@ DisplayServerWindows::DisplayServerWindows(const String &p_rendering_driver, Win
|
|||
gl_manager_angle = nullptr;
|
||||
windows.erase(MAIN_WINDOW_ID);
|
||||
r_error = ERR_UNAVAILABLE;
|
||||
ERR_FAIL_MSG("Failed to create an OpenGL window.");
|
||||
return;
|
||||
}
|
||||
RasterizerGLES3::make_current(false);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -312,7 +312,9 @@ class DisplayServerWindows : public DisplayServer {
|
|||
bool always_on_top = false;
|
||||
bool no_focus = false;
|
||||
bool exclusive = false;
|
||||
bool context_created = false;
|
||||
bool rendering_context_window_created = false;
|
||||
bool gl_native_window_created = false;
|
||||
bool gl_angle_window_created = false;
|
||||
bool mpass = false;
|
||||
bool sharp_corners = false;
|
||||
bool hide_from_capture = false;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue