Skip to content

Commit 3fce516

Browse files
committed
Merge pull request #94428 from alvinhochun/windows-angle-resize-sync
Windows: Update ANGLE surface size when window is resized
2 parents 9fe4cb6 + a1a0acf commit 3fce516

File tree

4 files changed

+11
-4
lines changed

4 files changed

+11
-4
lines changed

platform/windows/display_server_windows.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4852,16 +4852,16 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
48524852
rect_changed = true;
48534853
}
48544854
#if defined(RD_ENABLED)
4855-
if (rendering_context && window.context_created) {
4855+
if (window.create_completed && rendering_context && window.context_created) {
48564856
// Note: Trigger resize event to update swapchains when window is minimized/restored, even if size is not changed.
48574857
rendering_context->window_set_size(window_id, window.width, window.height);
48584858
}
48594859
#endif
48604860
#if defined(GLES3_ENABLED)
4861-
if (gl_manager_native) {
4861+
if (window.create_completed && gl_manager_native) {
48624862
gl_manager_native->window_resize(window_id, window.width, window.height);
48634863
}
4864-
if (gl_manager_angle) {
4864+
if (window.create_completed && gl_manager_angle) {
48654865
gl_manager_angle->window_resize(window_id, window.width, window.height);
48664866
}
48674867
#endif
@@ -5590,6 +5590,7 @@ DisplayServer::WindowID DisplayServerWindows::_create_window(WindowMode p_mode,
55905590
SetWindowPos(wd.hWnd, HWND_TOP, srect.position.x, srect.position.y, srect.size.width, srect.size.height, SWP_NOZORDER | SWP_NOACTIVATE);
55915591
}
55925592

5593+
wd.create_completed = true;
55935594
window_id_counter++;
55945595
}
55955596

platform/windows/display_server_windows.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,7 @@ class DisplayServerWindows : public DisplayServer {
441441

442442
Vector<Vector2> mpath;
443443

444+
bool create_completed = false;
444445
bool pre_fs_valid = false;
445446
RECT pre_fs_rect;
446447
bool maximized = false;

platform/windows/gl_manager_windows_angle.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,9 @@ Vector<EGLint> GLManagerANGLE_Windows::_get_platform_context_attribs() const {
6767
return ret;
6868
}
6969

70+
void GLManagerANGLE_Windows::window_resize(DisplayServer::WindowID p_window_id, int p_width, int p_height) {
71+
window_make_current(p_window_id);
72+
eglWaitNative(EGL_CORE_NATIVE_ENGINE);
73+
}
74+
7075
#endif // WINDOWS_ENABLED && GLES3_ENABLED

platform/windows/gl_manager_windows_angle.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class GLManagerANGLE_Windows : public EGLManager {
5050
virtual Vector<EGLint> _get_platform_context_attribs() const override;
5151

5252
public:
53-
void window_resize(DisplayServer::WindowID p_window_id, int p_width, int p_height) {}
53+
void window_resize(DisplayServer::WindowID p_window_id, int p_width, int p_height);
5454

5555
GLManagerANGLE_Windows(){};
5656
~GLManagerANGLE_Windows(){};

0 commit comments

Comments
 (0)