<None Include="OpenTK.csproj.paket.template" />
<None Include="paket.references" />
<Compile Include="Platform\MacOS\Cocoa\NSDragOperation.cs" />
+ <Compile Include="Platform\MacOS\CoreVideo.cs" />
</ItemGroup>
<ItemGroup>
<AdditionalFiles Include="$(SolutionDir)\stylecop.json">
--- /dev/null
+// See License.txt file for copyright details
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace OpenTK.Platform.MacOS
+{
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct CVTime
+ {
+ public Int64 timeValue;
+ public Int32 timeScale;
+ public Int32 flags;
+ }
+
+ internal class CV
+ {
+ private const string LibPath = "/System/Library/Frameworks/CoreVideo.framework/Versions/Current/CoreVideo";
+
+ internal enum TimeFlags : Int32
+ {
+ TimeIsIndefinite = 1 << 0
+ }
+
+ [DllImport(LibPath, EntryPoint = "CVDisplayLinkCreateWithCGDisplay")]
+ public extern static IntPtr DisplayLinkCreateWithCGDisplay(IntPtr currentDisplay, out IntPtr displayLink);
+
+ [DllImport(LibPath, EntryPoint = "CVDisplayLinkGetNominalOutputVideoRefreshPeriod")]
+ public extern static CVTime DisplayLinkGetNominalOutputVideoRefreshPeriod(IntPtr displayLink);
+
+ [DllImport(LibPath, EntryPoint = "CVDisplayLinkRelease")]
+ public extern static void DisplayLinkRelease(IntPtr displayLink);
+ }
+}
double freq = dict.GetNumberValue("RefreshRate");
bool current = currentMode.Ref == dict.Ref;
+ if (freq <= 0)
+ {
+ IntPtr displayLink;
+ CV.DisplayLinkCreateWithCGDisplay(currentDisplay, out displayLink);
+
+ CVTime t = CV.DisplayLinkGetNominalOutputVideoRefreshPeriod(displayLink);
+ if ((t.flags & (Int32)CV.TimeFlags.TimeIsIndefinite) != (Int32)CV.TimeFlags.TimeIsIndefinite)
+ {
+ freq = (double)t.timeScale / t.timeValue;
+ }
+
+ CV.DisplayLinkRelease(displayLink);
+ }
+
//if (current) Debug.Write(" * ");
//else Debug.Write(" ");