diff --git a/src/render/wiiu/SDL_render_wiiu.c b/src/render/wiiu/SDL_render_wiiu.c index 7510da4be7e12..c046b0711a226 100644 --- a/src/render/wiiu/SDL_render_wiiu.c +++ b/src/render/wiiu/SDL_render_wiiu.c @@ -28,6 +28,7 @@ #include "SDL_render_wiiu.h" #include +#include #include #include #include @@ -71,10 +72,13 @@ SDL_Renderer *WIIU_SDL_CreateRenderer(SDL_Window * window, Uint32 flags) renderer->RenderPresent = WIIU_SDL_RenderPresent; renderer->DestroyTexture = WIIU_SDL_DestroyTexture; renderer->DestroyRenderer = WIIU_SDL_DestroyRenderer; + renderer->SetVSync = WIIU_SDL_SetVSync; renderer->info = WIIU_RenderDriver.info; renderer->driverdata = data; renderer->window = window; + WIIU_SDL_SetVSync(renderer, (flags & SDL_RENDERER_PRESENTVSYNC) != 0); + /* Prepare shaders */ WIIU_SDL_CreateShaders(); diff --git a/src/render/wiiu/SDL_render_wiiu.h b/src/render/wiiu/SDL_render_wiiu.h index 524f208a146bf..4e015ebb8c6c1 100644 --- a/src/render/wiiu/SDL_render_wiiu.h +++ b/src/render/wiiu/SDL_render_wiiu.h @@ -127,6 +127,7 @@ int WIIU_SDL_QueueGeometry(SDL_Renderer * renderer, SDL_RenderCommand * cmd, SDL int WIIU_SDL_RunCommandQueue(SDL_Renderer * renderer, SDL_RenderCommand *cmd, void *vertices, size_t vertsize); int WIIU_SDL_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect, Uint32 format, void * pixels, int pitch); +int WIIU_SDL_SetVSync(SDL_Renderer * renderer, const int vsync); int WIIU_SDL_RenderPresent(SDL_Renderer * renderer); void WIIU_SDL_DestroyTexture(SDL_Renderer * renderer, SDL_Texture * texture); void WIIU_SDL_DestroyRenderer(SDL_Renderer * renderer); diff --git a/src/render/wiiu/SDL_rpresent_wiiu.c b/src/render/wiiu/SDL_rpresent_wiiu.c index f97c334a24dd3..c0ac7a1cc5b8a 100644 --- a/src/render/wiiu/SDL_rpresent_wiiu.c +++ b/src/render/wiiu/SDL_rpresent_wiiu.c @@ -36,6 +36,18 @@ static SDL_bool tvDrcEnabled = SDL_FALSE; +int WIIU_SDL_SetVSync(SDL_Renderer * renderer, const int vsync) +{ + GX2SetSwapInterval(vsync ? 1 : 0); + + if (GX2GetSwapInterval() > 0) { + renderer->info.flags |= SDL_RENDERER_PRESENTVSYNC; + } else { + renderer->info.flags &= ~SDL_RENDERER_PRESENTVSYNC; + } + return 0; +} + int WIIU_SDL_RenderPresent(SDL_Renderer * renderer) { WIIU_RenderData *data = (WIIU_RenderData *) renderer->driverdata;