From 71af2c020c5fdc353d54bc2f2dedd3e7d667ea3b Mon Sep 17 00:00:00 2001 From: Adrian Date: Sat, 6 Sep 2025 18:58:01 +0200 Subject: [PATCH] Set preferredFrameRateRange in main callbacks CADisplayLink (cherry picked from commit 01e6aceffc2da9d8a66baf47000510eb8a65ddac) --- src/main/ios/SDL_sysmain_callbacks.m | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/ios/SDL_sysmain_callbacks.m b/src/main/ios/SDL_sysmain_callbacks.m index becbda270d..2837a7691d 100644 --- a/src/main/ios/SDL_sysmain_callbacks.m +++ b/src/main/ios/SDL_sysmain_callbacks.m @@ -43,6 +43,17 @@ static SDLIosMainCallbacksDisplayLink *globalDisplayLink; { if ((self = [super init])) { self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(appIteration:)]; + // Enable high refresh rates on iOS + // To enable this on phones, you should add the following line to Info.plist: + // CADisableMinimumFrameDurationOnPhone + // If main callbacks are used then this CADisplayLink will affect framerate, not one in SDL_uikitviewcontroller. + if (@available(iOS 15.0, tvOS 15.0, *)) { + const SDL_DisplayMode *mode = SDL_GetDesktopDisplayMode(SDL_GetPrimaryDisplay()); + if (mode && mode->refresh_rate > 60.0f) { + int frame_rate = (int)mode->refresh_rate; + self.displayLink.preferredFrameRateRange = CAFrameRateRangeMake((frame_rate * 2) / 3, frame_rate, frame_rate); + } + } [self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; } return self;