mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-03-11 03:25:36 +00:00
render: Add Suspend/Resume calls for GDK support
This commit is contained in:
@@ -1563,17 +1563,19 @@ static void GPU_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture)
|
||||
}
|
||||
|
||||
#ifdef SDL_PLATFORM_GDK
|
||||
static bool SDLCALL GPU_GDKEventFilter(void *userdata, SDL_Event *event)
|
||||
|
||||
static void GPU_GDKSuspendRenderer(SDL_Renderer *renderer)
|
||||
{
|
||||
GPU_RenderData *data = (GPU_RenderData *)userdata;
|
||||
SDL_assert(!data->external_device);
|
||||
if (event->type == SDL_EVENT_DID_ENTER_BACKGROUND) {
|
||||
SDL_GDKSuspendGPU(data->device);
|
||||
} else if (event->type == SDL_EVENT_WILL_ENTER_FOREGROUND) {
|
||||
SDL_GDKResumeGPU(data->device);
|
||||
}
|
||||
return true;
|
||||
GPU_RenderData *data = (GPU_RenderData *)renderer->internal;
|
||||
SDL_GDKSuspendGPU(data->device);
|
||||
}
|
||||
|
||||
static void GPU_GDKResumeRenderer(SDL_Renderer *renderer)
|
||||
{
|
||||
GPU_RenderData *data = (GPU_RenderData *)renderer->internal;
|
||||
SDL_GDKResumeGPU(data->device);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static void GPU_DestroyRenderer(SDL_Renderer *renderer)
|
||||
@@ -1609,9 +1611,6 @@ static void GPU_DestroyRenderer(SDL_Renderer *renderer)
|
||||
if (data->device) {
|
||||
GPU_ReleaseShaders(&data->shaders, data->device);
|
||||
if (!data->external_device) {
|
||||
#ifdef SDL_PLATFORM_GDK
|
||||
SDL_RemoveEventWatch(GPU_GDKEventFilter, data);
|
||||
#endif
|
||||
SDL_DestroyGPUDevice(data->device);
|
||||
}
|
||||
}
|
||||
@@ -1722,6 +1721,10 @@ static bool GPU_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_P
|
||||
renderer->DestroyTexture = GPU_DestroyTexture;
|
||||
renderer->DestroyRenderer = GPU_DestroyRenderer;
|
||||
renderer->SetVSync = GPU_SetVSync;
|
||||
#ifdef SDL_PLATFORM_GDK
|
||||
renderer->GDKSuspendRenderer = GPU_GDKSuspendRenderer;
|
||||
renderer->GDKResumeRenderer = GPU_GDKResumeRenderer;
|
||||
#endif
|
||||
renderer->internal = data;
|
||||
renderer->window = window;
|
||||
renderer->name = GPU_RenderDriver.name;
|
||||
@@ -1775,10 +1778,6 @@ static bool GPU_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_P
|
||||
if (!data->device) {
|
||||
return false;
|
||||
}
|
||||
|
||||
#ifdef SDL_PLATFORM_GDK
|
||||
SDL_AddEventWatch(GPU_GDKEventFilter, data);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (!GPU_InitShaders(&data->shaders, data->device)) {
|
||||
|
||||
Reference in New Issue
Block a user