render/wiiu: Handle window size changes

This commit is contained in:
Ash Logan 2019-03-06 15:43:40 +11:00
parent 89013edb6c
commit b17164d5f6
3 changed files with 21 additions and 5 deletions

View File

@ -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)

View File

@ -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;

View File

@ -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);
}
}