| 106 | } |
| 107 | |
| 108 | void FreeRenderer() |
| 109 | { |
| 110 | #if defined(_WIN32) && !defined(NXDK) |
| 111 | bool wasD3D9 = false; |
| 112 | if (renderer != nullptr) { |
| 113 | SDL_RendererInfo previousRendererInfo; |
| 114 | SDL_GetRendererInfo(renderer, &previousRendererInfo); |
| 115 | wasD3D9 = (string_view(previousRendererInfo.name) == "direct3d"); |
| 116 | } |
| 117 | #endif |
| 118 | |
| 119 | if (renderer != nullptr) { |
| 120 | SDL_DestroyRenderer(renderer); |
| 121 | renderer = nullptr; |
| 122 | } |
| 123 | |
| 124 | #if defined(_WIN32) && !defined(NXDK) && !defined(USE_SDL1) |
| 125 | // On Windows 11 the directx9 VSYNC timer doesn't get recreated properly, see https://github.com/libsdl-org/SDL/issues/5099 |
| 126 | if (wasD3D9 && *sgOptions.Graphics.upscale && *sgOptions.Graphics.frameRateControl != FrameRateControl::VerticalSync) { |
| 127 | std::string title = SDL_GetWindowTitle(ghMainWnd); |
| 128 | Uint32 flags = SDL_GetWindowFlags(ghMainWnd); |
| 129 | Rectangle dimensions; |
| 130 | |
| 131 | SDL_GetWindowPosition(ghMainWnd, &dimensions.position.x, &dimensions.position.y); |
| 132 | SDL_GetWindowSize(ghMainWnd, &dimensions.size.width, &dimensions.size.height); |
| 133 | SDL_DestroyWindow(ghMainWnd); |
| 134 | |
| 135 | ghMainWnd = SDL_CreateWindow( |
| 136 | title.c_str(), |
| 137 | dimensions.position.x, |
| 138 | dimensions.position.y, |
| 139 | dimensions.size.width, |
| 140 | dimensions.size.height, |
| 141 | flags); |
| 142 | } |
| 143 | #endif |
| 144 | } |
| 145 | |
| 146 | SDL_DisplayMode GetNearestDisplayMode(Size preferredSize) |
| 147 | { |
no test coverage detected