--- a/src/Libraries/INPUT/Source/sdl_events.c
+++ b/src/Libraries/INPUT/Source/sdl_events.c
@@ -737,7 +737,24 @@
                 break;
 
             case SDL_WINDOWEVENT_MOVED:
+                break;
+
             case SDL_WINDOWEVENT_RESIZED:
+#ifdef __ANDROID__
+                // Android's SDL video backend (Android_SendResize() in
+                // src/video/android/SDL_androidvideo.c) only ever sends
+                // RESIZED for surface-driven resizes - e.g. the Quest Home
+                // shell settling the 2D panel into its requested <layout>
+                // defaultWidth/defaultHeight after activity launch - never
+                // SIZE_CHANGED (unlike desktop platforms, where an
+                // app-driven SDL_SetWindowSize() triggers both, handled
+                // above). Without this, opengl_resize() never re-runs after
+                // that late resize, leaving the GL viewport stuck at
+                // whatever (smaller) size the window first reported,
+                // rendered into one corner of the now-larger surface.
+                if (can_use_opengl())
+                    opengl_resize(ev.window.data1, ev.window.data2);
+#endif
                 break;
 
             case SDL_WINDOWEVENT_FOCUS_GAINED:
