mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-05-17 02:08:27 +00:00
Clean up renderers at shutdown
Fixes https://github.com/libsdl-org/SDL/issues/10082
This commit is contained in:
parent
fd3143f445
commit
ab3c8552c2
3 changed files with 34 additions and 0 deletions
|
@ -47,6 +47,7 @@
|
||||||
#include "haptic/SDL_haptic_c.h"
|
#include "haptic/SDL_haptic_c.h"
|
||||||
#include "joystick/SDL_gamepad_c.h"
|
#include "joystick/SDL_gamepad_c.h"
|
||||||
#include "joystick/SDL_joystick_c.h"
|
#include "joystick/SDL_joystick_c.h"
|
||||||
|
#include "render/SDL_sysrender.h"
|
||||||
#include "sensor/SDL_sensor_c.h"
|
#include "sensor/SDL_sensor_c.h"
|
||||||
#include "stdlib/SDL_getenv_c.h"
|
#include "stdlib/SDL_getenv_c.h"
|
||||||
#include "video/SDL_video_c.h"
|
#include "video/SDL_video_c.h"
|
||||||
|
@ -474,6 +475,7 @@ void SDL_QuitSubSystem(Uint32 flags)
|
||||||
#ifndef SDL_VIDEO_DISABLED
|
#ifndef SDL_VIDEO_DISABLED
|
||||||
if (flags & SDL_INIT_VIDEO) {
|
if (flags & SDL_INIT_VIDEO) {
|
||||||
if (SDL_ShouldQuitSubsystem(SDL_INIT_VIDEO)) {
|
if (SDL_ShouldQuitSubsystem(SDL_INIT_VIDEO)) {
|
||||||
|
SDL_QuitRender();
|
||||||
SDL_VideoQuit();
|
SDL_VideoQuit();
|
||||||
/* video implies events */
|
/* video implies events */
|
||||||
SDL_QuitSubSystem(SDL_INIT_EVENTS);
|
SDL_QuitSubSystem(SDL_INIT_EVENTS);
|
||||||
|
|
|
@ -133,6 +133,14 @@ static const SDL_RenderDriver *render_drivers[] = {
|
||||||
};
|
};
|
||||||
#endif /* !SDL_RENDER_DISABLED */
|
#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)
|
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,
|
SDL_LogInfo(SDL_LOG_CATEGORY_RENDER,
|
||||||
"Created renderer: %s", renderer->name);
|
"Created renderer: %s", renderer->name);
|
||||||
|
|
||||||
|
renderer->next = SDL_renderers;
|
||||||
|
SDL_renderers = renderer;
|
||||||
|
|
||||||
#ifdef SDL_PLATFORM_ANDROID
|
#ifdef SDL_PLATFORM_ANDROID
|
||||||
Android_ActivityMutex_Unlock();
|
Android_ActivityMutex_Unlock();
|
||||||
#endif
|
#endif
|
||||||
|
@ -4619,6 +4630,22 @@ void SDL_DestroyRenderer(SDL_Renderer *renderer)
|
||||||
if (!renderer->destroyed) {
|
if (!renderer->destroyed) {
|
||||||
SDL_DestroyRendererWithoutFreeing(renderer);
|
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_SetObjectValid(renderer, SDL_OBJECT_TYPE_RENDERER, SDL_FALSE); // It's no longer magical...
|
||||||
|
|
||||||
SDL_free(renderer->texture_formats);
|
SDL_free(renderer->texture_formats);
|
||||||
|
|
|
@ -291,6 +291,8 @@ struct SDL_Renderer
|
||||||
SDL_bool destroyed; // already destroyed by SDL_DestroyWindow; just free this struct in SDL_DestroyRenderer.
|
SDL_bool destroyed; // already destroyed by SDL_DestroyWindow; just free this struct in SDL_DestroyRenderer.
|
||||||
|
|
||||||
void *driverdata;
|
void *driverdata;
|
||||||
|
|
||||||
|
SDL_Renderer *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Define the SDL render driver structure */
|
/* Define the SDL render driver structure */
|
||||||
|
@ -314,6 +316,9 @@ extern SDL_RenderDriver PSP_RenderDriver;
|
||||||
extern SDL_RenderDriver SW_RenderDriver;
|
extern SDL_RenderDriver SW_RenderDriver;
|
||||||
extern SDL_RenderDriver VITA_GXM_RenderDriver;
|
extern SDL_RenderDriver VITA_GXM_RenderDriver;
|
||||||
|
|
||||||
|
/* Clean up any renderers at shutdown */
|
||||||
|
extern void SDL_QuitRender(void);
|
||||||
|
|
||||||
/* Add a supported texture format to a renderer */
|
/* Add a supported texture format to a renderer */
|
||||||
extern int SDL_AddSupportedTextureFormat(SDL_Renderer *renderer, SDL_PixelFormatEnum format);
|
extern int SDL_AddSupportedTextureFormat(SDL_Renderer *renderer, SDL_PixelFormatEnum format);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue