author Sam Lantinga
Sat, 23 Aug 2014 10:47:50 -0700
changeset 9112 345a7d41dda9
parent 7925 f090a47eb7f7
permissions -rwxr-xr-x
Fixed bug 2696 - Mac: fix display mode refresh rate calculation

Alex Szpakowski

SDL's Cocoa backend uses the CGDisplayMode API to get refresh rate information about a display mode, but CGDisplayModeGetRefreshRate will return 0 on most non-CRT monitors.

The only way I know of to get correct refresh rate information in OS X is via the CoreVideo DisplayLink API.
I have attached a patch which tries to use the CVDisplayLinkGetNominalOutputVideoRefreshPeriod function if CGDisplayModeGetRefreshRate fails, which fixes display mode refresh rate information on the monitors I tested.

The CVDisplayLink API requires linking with the CoreVideo framework, and the patch updates the various build files to do so.
     1 Use the Xcode command files (located in the Xcode/build-scripts folder)
     2 to conveniently generate a workspace for Xcode 3 or Xcode 4. It also
     3 contains a cleaner script and a convenient script for automatically
     4 running all the test suites.
     6 If you use the script to automatically build the workspace file, you
     7 need to open the workspace at least once after generating it, or it
     8 will give errors that certain schema do not exist within the workspace.
     9 Also, the script depends on Xcode command line tools being installed.
    11 There are separate build files for building for i386 architecture
    12 versus x86_64 architecture. There are separate build scripts for
    13 Xcode 3 versus Xcode 4, but these just use the different toolchains.
    15 There is a script for automatically running through all known supported
    16 tests on that platform.
    18 The Mac OS X projects currently have reliance on the following dependencies:
    20   -CoreVideo.framework
    21   -AudioToolbox.framework
    22   -AudioUnit.framework
    23   -Cocoa.framework
    24   -CoreAudio.framework
    25   -IOKit.framework
    26   -Carbon.framework
    27   -ForceFeedback.framework
    28   -CoreFoundation.framework
    30 It will also link to OpenGL.framework, as the dependency function for OpenGL
    31 assumes that OpenGL always exists on Mac OS X. However, this is defined in
    32 a segmented way to allow the possibility of no OpenGL support on Mac OS X.
    34 Run the clean script to clear out the directory of Xcode-related files
    35 and binaries.