The refresh rate in SDL_DisplayMode is now a float

This commit is contained in:
Sam Lantinga
2023-01-02 15:47:19 -08:00
parent 851b0e16be
commit e3c1749f5b
32 changed files with 107 additions and 83 deletions

View File

@@ -915,22 +915,23 @@ static SDL_RenderLineMethod SDL_GetRenderLineMethod()
static void SDL_CalculateSimulatedVSyncInterval(SDL_Renderer *renderer, SDL_Window *window)
{
/* FIXME: SDL refresh rate API should return numerator/denominator */
int refresh_rate = 0;
int display_index = SDL_GetWindowDisplayIndex(window);
SDL_DisplayMode mode;
float refresh_rate;
int num, den;
if (display_index < 0) {
display_index = 0;
}
if (SDL_GetDesktopDisplayMode(display_index, &mode) == 0) {
if (SDL_GetDesktopDisplayMode(display_index, &mode) == 0 && mode.refresh_rate > 0.0f) {
refresh_rate = mode.refresh_rate;
}
if (!refresh_rate) {
} else {
/* Pick a good default refresh rate */
refresh_rate = 60;
refresh_rate = 60.0f;
}
renderer->simulate_vsync_interval_ns = (SDL_NS_PER_SECOND / refresh_rate);
num = 100;
den = (int)(100 * refresh_rate);
renderer->simulate_vsync_interval_ns = (SDL_NS_PER_SECOND * num) / den;
}
#endif /* !SDL_RENDER_DISABLED */

View File

@@ -300,7 +300,7 @@ static int D3D_ActivateRenderer(SDL_Renderer *renderer)
SDL_GetWindowDisplayMode(window, &fullscreen_mode);
data->pparams.Windowed = FALSE;
data->pparams.BackBufferFormat = PixelFormatToD3DFMT(fullscreen_mode.format);
data->pparams.FullScreen_RefreshRateInHz = fullscreen_mode.refresh_rate;
data->pparams.FullScreen_RefreshRateInHz = (UINT)SDL_ceilf(fullscreen_mode.refresh_rate);
} else {
data->pparams.Windowed = TRUE;
data->pparams.BackBufferFormat = D3DFMT_UNKNOWN;
@@ -1627,7 +1627,7 @@ D3D_CreateRenderer(SDL_Window *window, Uint32 flags)
if (window_flags & SDL_WINDOW_FULLSCREEN && (window_flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != SDL_WINDOW_FULLSCREEN_DESKTOP) {
pparams.Windowed = FALSE;
pparams.BackBufferFormat = PixelFormatToD3DFMT(fullscreen_mode.format);
pparams.FullScreen_RefreshRateInHz = fullscreen_mode.refresh_rate;
pparams.FullScreen_RefreshRateInHz = (UINT)SDL_ceilf(fullscreen_mode.refresh_rate);
} else {
pparams.Windowed = TRUE;
pparams.BackBufferFormat = D3DFMT_UNKNOWN;