Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update #12026

Merged
merged 2 commits into from
Jan 20, 2025
Merged

Update #12026

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 27 additions & 22 deletions src/events/SDL_events.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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;
Expand Down
2 changes: 2 additions & 0 deletions src/events/SDL_events_c.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
6 changes: 4 additions & 2 deletions src/video/SDL_video.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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);
Expand Down
Loading
Loading