events: Added SDL_RenderEvent.

Fixes #11465.
This commit is contained in:
Ryan C. Gordon
2024-11-21 12:59:41 -05:00
parent 848fd1eab4
commit 615c935d11
8 changed files with 39 additions and 13 deletions

View File

@@ -450,10 +450,15 @@ static void SDL_LogEvent(const SDL_Event *event)
break;
SDL_EVENT_CASE(SDL_EVENT_CLIPBOARD_UPDATE)
break;
SDL_EVENT_CASE(SDL_EVENT_RENDER_TARGETS_RESET)
break;
SDL_EVENT_CASE(SDL_EVENT_RENDER_DEVICE_RESET)
break;
#define SDL_RENDEREVENT_CASE(x) \
case x: \
SDL_strlcpy(name, #x, sizeof(name)); \
(void)SDL_snprintf(details, sizeof(details), " (timestamp=%u event=%s windowid=%u)", \
(uint)event->display.timestamp, name, (uint)event->render.windowID); \
break
SDL_RENDEREVENT_CASE(SDL_EVENT_RENDER_TARGETS_RESET);
SDL_RENDEREVENT_CASE(SDL_EVENT_RENDER_DEVICE_RESET);
#define SDL_DISPLAYEVENT_CASE(x) \
case x: \

View File

@@ -1559,8 +1559,9 @@ static bool D3D_Reset(SDL_Renderer *renderer)
// Let the application know that render targets were reset
{
SDL_Event event;
SDL_zero(event);
event.type = SDL_EVENT_RENDER_TARGETS_RESET;
event.common.timestamp = 0;
event.render.windowID = SDL_GetWindowID(SDL_GetRenderWindow(renderer));
SDL_PushEvent(&event);
}

View File

@@ -1084,8 +1084,9 @@ static bool D3D11_HandleDeviceLost(SDL_Renderer *renderer)
// Let the application know that the device has been reset or lost
SDL_Event event;
SDL_zero(event);
event.type = recovered ? SDL_EVENT_RENDER_DEVICE_RESET : SDL_EVENT_RENDER_DEVICE_LOST;
event.common.timestamp = 0;
event.render.windowID = SDL_GetWindowID(SDL_GetRenderWindow(renderer));
SDL_PushEvent(&event);
return recovered;

View File

@@ -1459,8 +1459,9 @@ static bool D3D12_HandleDeviceLost(SDL_Renderer *renderer)
// Let the application know that the device has been reset or lost
SDL_Event event;
SDL_zero(event);
event.type = recovered ? SDL_EVENT_RENDER_DEVICE_RESET : SDL_EVENT_RENDER_DEVICE_LOST;
event.common.timestamp = 0;
event.render.windowID = SDL_GetWindowID(SDL_GetRenderWindow(renderer));
SDL_PushEvent(&event);
return recovered;

View File

@@ -2519,8 +2519,9 @@ static bool VULKAN_HandleDeviceLost(SDL_Renderer *renderer)
// Let the application know that the device has been reset or lost
SDL_Event event;
SDL_zero(event);
event.type = recovered ? SDL_EVENT_RENDER_DEVICE_RESET : SDL_EVENT_RENDER_DEVICE_LOST;
event.common.timestamp = 0;
event.render.windowID = SDL_GetWindowID(SDL_GetRenderWindow(renderer));
SDL_PushEvent(&event);
return recovered;

View File

@@ -1899,13 +1899,13 @@ void SDLTest_PrintEvent(const SDL_Event *event)
break;
case SDL_EVENT_RENDER_TARGETS_RESET:
SDL_Log("SDL EVENT: render targets reset");
SDL_Log("SDL EVENT: render targets reset in window %" SDL_PRIu32, event->render.windowID);
break;
case SDL_EVENT_RENDER_DEVICE_RESET:
SDL_Log("SDL EVENT: render device reset");
SDL_Log("SDL EVENT: render device reset in window %" SDL_PRIu32, event->render.windowID);
break;
case SDL_EVENT_RENDER_DEVICE_LOST:
SDL_Log("SDL EVENT: render device lost");
SDL_Log("SDL EVENT: render device lost in window %" SDL_PRIu32, event->render.windowID);
break;
case SDL_EVENT_TERMINATING:

View File

@@ -36,15 +36,16 @@
static void android_egl_context_restore(SDL_Window *window)
{
if (window) {
SDL_Event event;
SDL_WindowData *data = window->internal;
SDL_GL_MakeCurrent(window, NULL);
if (!SDL_GL_MakeCurrent(window, (SDL_GLContext)data->egl_context)) {
// The context is no longer valid, create a new one
data->egl_context = (EGLContext)SDL_GL_CreateContext(window);
SDL_GL_MakeCurrent(window, (SDL_GLContext)data->egl_context);
SDL_Event event;
SDL_zero(event);
event.type = SDL_EVENT_RENDER_DEVICE_RESET;
event.common.timestamp = 0;
event.render.windowID = SDL_GetWindowID(SDL_GetRenderWindow(renderer));
SDL_PushEvent(&event);
}
data->backup_done = false;