Skip to content

Commit

Permalink
Fixed 4669 - Using the software SDL_Renderer on Android leads to GL e…
Browse files Browse the repository at this point in the history
…rrors & black screen when window resizes

Sylvain

I think what happening with the software renderer is:

* you're somehow in background (so texture creation is not possible)
* it resizes and wants to push a SDL_WINDOWEVENT_SIZE_CHANGED
It call:
https://hg.libsdl.org/SDL/file/a010811d40dd/src/render/SDL_render.c#l683
* GetOutputSize
* SW_GetOutputSize
* SW_ActivateRenderer
* SDL_GetWindowSurface
* SDL_CreateWindowFramebuffer which is mapped to SDL_CreateWindowTexture
and it ends up re-creating the surface/a texture, while being in background
  • Loading branch information
slouken committed Jun 18, 2019
1 parent e96d476 commit 5dcac4c
Showing 1 changed file with 13 additions and 8 deletions.
21 changes: 13 additions & 8 deletions src/render/software/SDL_render_sw.c
Expand Up @@ -82,20 +82,25 @@ SW_WindowEvent(SDL_Renderer * renderer, const SDL_WindowEvent *event)
static int
SW_GetOutputSize(SDL_Renderer * renderer, int *w, int *h)
{
SDL_Surface *surface = SW_ActivateRenderer(renderer);
SW_RenderData *data = (SW_RenderData *) renderer->driverdata;

if (surface) {
if (data->surface) {
if (w) {
*w = surface->w;
*w = data->surface->w;
}
if (h) {
*h = surface->h;
*h = data->surface->h;
}
return 0;
} else {
SDL_SetError("Software renderer doesn't have an output surface");
return -1;
}

if (renderer->window) {
SDL_GetWindowSize(renderer->window, w, h);
return 0;
}

SDL_SetError("Software renderer doesn't have an output surface");
return -1;
}

static int
Expand Down Expand Up @@ -179,7 +184,7 @@ SW_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture)
{
SW_RenderData *data = (SW_RenderData *) renderer->driverdata;

if (texture ) {
if (texture) {
data->surface = (SDL_Surface *) texture->driverdata;
} else {
data->surface = data->window;
Expand Down

0 comments on commit 5dcac4c

Please sign in to comment.