diff --git a/src/events/SDL_events.c b/src/events/SDL_events.c index f7b598304b3ab..527cf0642ba2e 100644 --- a/src/events/SDL_events.c +++ b/src/events/SDL_events.c @@ -1354,29 +1354,8 @@ bool SDL_RunOnMainThread(SDL_MainThreadCallback callback, void *userdata, bool w } } -// Run the system dependent event loops -static void SDL_PumpEventsInternal(bool push_sentinel) +void SDL_PumpEventMaintenance(void) { - // Free any temporary memory from old events - SDL_FreeTemporaryMemory(); - - // Release any keys held down from last frame - SDL_ReleaseAutoReleaseKeys(); - - // Run any pending main thread callbacks - SDL_RunMainThreadCallbacks(); - -#ifdef SDL_PLATFORM_ANDROID - // Android event processing is independent of the video subsystem - Android_PumpEvents(0); -#else - // Get events from the video subsystem - SDL_VideoDevice *_this = SDL_GetVideoDevice(); - if (_this) { - _this->PumpEvents(_this); - } -#endif - #ifndef SDL_AUDIO_DISABLED SDL_UpdateAudio(); #endif @@ -1400,6 +1379,32 @@ static void SDL_PumpEventsInternal(bool push_sentinel) #endif SDL_SendPendingSignalEvents(); // in case we had a signal handler fire, etc. +} + +// Run the system dependent event loops +static void SDL_PumpEventsInternal(bool push_sentinel) +{ + // Free any temporary memory from old events + SDL_FreeTemporaryMemory(); + + // Release any keys held down from last frame + SDL_ReleaseAutoReleaseKeys(); + + // Run any pending main thread callbacks + SDL_RunMainThreadCallbacks(); + +#ifdef SDL_PLATFORM_ANDROID + // Android event processing is independent of the video subsystem + Android_PumpEvents(0); +#else + // Get events from the video subsystem + SDL_VideoDevice *_this = SDL_GetVideoDevice(); + if (_this) { + _this->PumpEvents(_this); + } +#endif + + SDL_PumpEventMaintenance(); if (push_sentinel && SDL_EventEnabled(SDL_EVENT_POLL_SENTINEL)) { SDL_Event sentinel; diff --git a/src/events/SDL_events_c.h b/src/events/SDL_events_c.h index 041d714f51c12..e56ac475e5a20 100644 --- a/src/events/SDL_events_c.h +++ b/src/events/SDL_events_c.h @@ -51,6 +51,8 @@ extern const char *SDL_CreateTemporaryString(const char *string); extern void *SDL_ClaimTemporaryMemory(const void *mem); extern void SDL_FreeTemporaryMemory(void); +extern void SDL_PumpEventMaintenance(void); + extern void SDL_SendQuit(void); extern bool SDL_InitEvents(void); diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index b896e99875b62..6acd400e0ef29 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -3951,6 +3951,8 @@ void SDL_OnWindowLiveResizeUpdate(SDL_Window *window) // Send an expose event so the application can redraw SDL_SendWindowEvent(window, SDL_EVENT_WINDOW_EXPOSED, 0, 0); } + + SDL_PumpEventMaintenance(); } static void SDL_CheckWindowSafeAreaChanged(SDL_Window *window) @@ -4922,12 +4924,12 @@ bool SDL_GL_GetAttribute(SDL_GLAttr attr, int *value) if (glBindFramebufferFunc && (current_fbo != 0)) { glBindFramebufferFunc(GL_DRAW_FRAMEBUFFER, 0); } - // glGetFramebufferAttachmentParameterivFunc may cause GL_INVALID_OPERATION when querying depth/stencil size if the + // glGetFramebufferAttachmentParameterivFunc may cause GL_INVALID_OPERATION when querying depth/stencil size if the // bits is 0. From the GL docs: // If the value of GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE is GL_NONE, then either no framebuffer is bound to target; // or a default framebuffer is queried, attachment is GL_DEPTH or GL_STENCIL, and the number of depth or stencil bits, // respectively, is zero. In this case querying pname GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME will return zero, and all - // other queries will generate an error. + // other queries will generate an error. GLint fbo_type = GL_FRAMEBUFFER_DEFAULT; if (attachment == GL_DEPTH || attachment == GL_STENCIL) { glGetFramebufferAttachmentParameterivFunc(GL_FRAMEBUFFER, attachment, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &fbo_type);