Clean up renderers at shutdown

Fixes https://github.com/libsdl-org/SDL/issues/10082
This commit is contained in:
Sam Lantinga 2024-06-23 00:41:19 -07:00
parent fd3143f445
commit ab3c8552c2
3 changed files with 34 additions and 0 deletions

View file

@ -133,6 +133,14 @@ static const SDL_RenderDriver *render_drivers[] = {
};
#endif /* !SDL_RENDER_DISABLED */
static SDL_Renderer *SDL_renderers;
void SDL_QuitRender(void)
{
while (SDL_renderers) {
SDL_DestroyRenderer(SDL_renderers);
}
}
int SDL_AddSupportedTextureFormat(SDL_Renderer *renderer, SDL_PixelFormatEnum format)
{
@ -1105,6 +1113,9 @@ SDL_Renderer *SDL_CreateRendererWithProperties(SDL_PropertiesID props)
SDL_LogInfo(SDL_LOG_CATEGORY_RENDER,
"Created renderer: %s", renderer->name);
renderer->next = SDL_renderers;
SDL_renderers = renderer;
#ifdef SDL_PLATFORM_ANDROID
Android_ActivityMutex_Unlock();
#endif
@ -4619,6 +4630,22 @@ void SDL_DestroyRenderer(SDL_Renderer *renderer)
if (!renderer->destroyed) {
SDL_DestroyRendererWithoutFreeing(renderer);
}
SDL_Renderer *curr = SDL_renderers;
SDL_Renderer *prev = NULL;
while (curr) {
if (curr == renderer) {
if (prev) {
prev->next = renderer->next;
} else {
SDL_renderers = renderer->next;
}
break;
}
prev = curr;
curr = curr->next;
}
SDL_SetObjectValid(renderer, SDL_OBJECT_TYPE_RENDERER, SDL_FALSE); // It's no longer magical...
SDL_free(renderer->texture_formats);