mirror of
https://github.com/Relintai/sdl2_frt.git
synced 2024-12-20 22:16:49 +01:00
Fixed 4669 - Using the software SDL_Renderer on Android leads to GL errors & 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
This commit is contained in:
parent
e96d4760ac
commit
5dcac4ccdf
@ -82,20 +82,25 @@ SW_WindowEvent(SDL_Renderer * renderer, const SDL_WindowEvent *event)
|
|||||||
static int
|
static int
|
||||||
SW_GetOutputSize(SDL_Renderer * renderer, int *w, int *h)
|
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) {
|
if (w) {
|
||||||
*w = surface->w;
|
*w = data->surface->w;
|
||||||
}
|
}
|
||||||
if (h) {
|
if (h) {
|
||||||
*h = surface->h;
|
*h = data->surface->h;
|
||||||
}
|
}
|
||||||
return 0;
|
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
|
static int
|
||||||
@ -179,7 +184,7 @@ SW_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture)
|
|||||||
{
|
{
|
||||||
SW_RenderData *data = (SW_RenderData *) renderer->driverdata;
|
SW_RenderData *data = (SW_RenderData *) renderer->driverdata;
|
||||||
|
|
||||||
if (texture ) {
|
if (texture) {
|
||||||
data->surface = (SDL_Surface *) texture->driverdata;
|
data->surface = (SDL_Surface *) texture->driverdata;
|
||||||
} else {
|
} else {
|
||||||
data->surface = data->window;
|
data->surface = data->window;
|
||||||
|
Loading…
Reference in New Issue
Block a user