Fixed refresh interval calculation

This commit is contained in:
Sam Lantinga 2024-07-13 08:52:43 -07:00
parent 2dcb9440f1
commit 44f06b216a
1 changed files with 11 additions and 10 deletions

View File

@ -918,21 +918,22 @@ static void SDL_CalculateSimulatedVSyncInterval(SDL_Renderer *renderer, SDL_Wind
{
SDL_DisplayID displayID = SDL_GetDisplayForWindow(window);
const SDL_DisplayMode *mode;
int num, den;
int refresh_num, refresh_den;
if (displayID == 0) {
displayID = SDL_GetPrimaryDisplay();
}
mode = SDL_GetDesktopDisplayMode(displayID);
if (mode && mode->refresh_rate_numerator > 0) {
num = mode->refresh_rate_numerator;
den = mode->refresh_rate_denominator;
if (mode && mode->refresh_rate_numerator > 0 && mode->refresh_rate_denominator > 0) {
refresh_num = mode->refresh_rate_numerator;
refresh_den = mode->refresh_rate_denominator;
} else {
/* Pick a good default refresh rate */
num = 60;
den = 1;
refresh_num = 60;
refresh_den = 1;
}
renderer->simulate_vsync_interval_ns = (SDL_NS_PER_SECOND * num) / den;
/* Flip numerator and denominator to change from framerate to interval */
renderer->simulate_vsync_interval_ns = (SDL_NS_PER_SECOND * refresh_den) / refresh_num;
}
#endif /* !SDL_RENDER_DISABLED */
@ -1156,10 +1157,10 @@ SDL_Renderer *SDL_CreateSoftwareRenderer(SDL_Surface *surface)
#if SDL_VIDEO_RENDER_SW
SDL_Renderer *renderer;
if (!surface) {
if (!surface) {
SDL_InvalidParamError("surface");
return NULL;
}
return NULL;
}
SDL_PropertiesID props = SDL_CreateProperties();
SDL_SetPointerProperty(props, SDL_PROP_RENDERER_CREATE_SURFACE_POINTER, surface);