From 9ce6ef0464684c5a1aa9ba1cc7b145a2fa94f249 Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Wed, 6 Mar 2019 15:43:40 +1100 Subject: [PATCH] render/wiiu: Handle window size changes --- src/render/wiiu/SDL_render_wiiu.c | 22 +++++++++++++++++----- src/render/wiiu/SDL_render_wiiu.h | 3 +++ src/render/wiiu/SDL_rwindow_wiiu.c | 1 + 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/render/wiiu/SDL_render_wiiu.c b/src/render/wiiu/SDL_render_wiiu.c index 5bc88ec3c..da696cc9a 100644 --- a/src/render/wiiu/SDL_render_wiiu.c +++ b/src/render/wiiu/SDL_render_wiiu.c @@ -102,17 +102,29 @@ SDL_Renderer *WIIU_SDL_CreateRenderer(SDL_Window * window, Uint32 flags) memset(data->ctx, 0, sizeof(GX2ContextState)); GX2SetupContextStateEx(data->ctx, TRUE); + // Make a texture for the window + WIIU_SDL_CreateWindowTex(renderer, window); + + // Setup colour buffer, rendering to the window + WIIU_SDL_SetRenderTarget(renderer, NULL); + + return renderer; +} + +void WIIU_SDL_CreateWindowTex(SDL_Renderer * renderer, SDL_Window * window) { + WIIU_RenderData *data = (WIIU_RenderData *) renderer->driverdata; + + if (data->windowTex.driverdata) { + WIIU_SDL_DestroyTexture(renderer, &data->windowTex); + data->windowTex = (SDL_Texture) {0}; + } + // Allocate a buffer for the window data->windowTex = (SDL_Texture) { .format = SDL_PIXELFORMAT_RGBA8888, }; SDL_GetWindowSize(window, &data->windowTex.w, &data->windowTex.h); WIIU_SDL_CreateTexture(renderer, &data->windowTex); - - // Setup colour buffer, rendering to the window - WIIU_SDL_SetRenderTarget(renderer, NULL); - - return renderer; } int WIIU_SDL_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture) diff --git a/src/render/wiiu/SDL_render_wiiu.h b/src/render/wiiu/SDL_render_wiiu.h index 1cab7f605..aaf4dab1b 100644 --- a/src/render/wiiu/SDL_render_wiiu.h +++ b/src/render/wiiu/SDL_render_wiiu.h @@ -118,6 +118,9 @@ void WIIU_SDL_RenderPresent(SDL_Renderer * renderer); void WIIU_SDL_DestroyTexture(SDL_Renderer * renderer, SDL_Texture * texture); void WIIU_SDL_DestroyRenderer(SDL_Renderer * renderer); +//Driver internal functions +void WIIU_SDL_CreateWindowTex(SDL_Renderer * renderer, SDL_Window * window); + //Utility/helper functions static inline Uint32 TextureNextPow2(Uint32 w) { Uint32 n = 2; diff --git a/src/render/wiiu/SDL_rwindow_wiiu.c b/src/render/wiiu/SDL_rwindow_wiiu.c index 364fb25d3..3005aea00 100644 --- a/src/render/wiiu/SDL_rwindow_wiiu.c +++ b/src/render/wiiu/SDL_rwindow_wiiu.c @@ -41,6 +41,7 @@ void WIIU_SDL_WindowEvent(SDL_Renderer * renderer, const SDL_WindowEvent *event) // Re-init the colour buffer etc. for new window size // TODO check: what if we're rendering to a texture when this happens? // SDL may handle this already, see SDL_render.c: SDL_RendererEventWatch + WIIU_SDL_CreateWindowTex(renderer, renderer->window); WIIU_SDL_SetRenderTarget(renderer, NULL); } }