Fix up display capturing.

This commit is contained in:
kanato 2009-02-05 04:35:15 +00:00
parent 8cc99350de
commit 4f4dd33c13

View file

@ -104,7 +104,7 @@ namespace OpenTK.Platform.MacOS
#region IDisplayDeviceDriver Members #region IDisplayDeviceDriver Members
Dictionary<IntPtr, IntPtr> storedModes = new Dictionary<IntPtr, IntPtr>(); Dictionary<IntPtr, IntPtr> storedModes = new Dictionary<IntPtr, IntPtr>();
List<IntPtr> displaysCaptured = new List<IntPtr>();
public bool TryChangeResolution(DisplayDevice device, DisplayResolution resolution) public bool TryChangeResolution(DisplayDevice device, DisplayResolution resolution)
{ {
@ -131,9 +131,14 @@ namespace OpenTK.Platform.MacOS
if (width == resolution.Width && if (width == resolution.Width &&
height == resolution.Height && height == resolution.Height &&
bpp == resolution.BitsPerPixel && bpp == resolution.BitsPerPixel &&
freq == resolution.RefreshRate) System.Math.Abs(freq - resolution.RefreshRate) < 1e-6)
{ {
CG.DisplayCapture(display); if (displaysCaptured.Contains(display) == false)
{
CG.DisplayCapture(display);
}
Debug.Print("Changing resolution to {0}x{1}x{2}@{3}.", width, height, bpp, freq);
CG.DisplaySwitchToMode(display, displayModes[j]); CG.DisplaySwitchToMode(display, displayModes[j]);
@ -150,8 +155,12 @@ namespace OpenTK.Platform.MacOS
if (storedModes.ContainsKey(display)) if (storedModes.ContainsKey(display))
{ {
Debug.Print("Restoring resolution.");
CG.DisplaySwitchToMode(display, storedModes[display]); CG.DisplaySwitchToMode(display, storedModes[display]);
CG.DisplayRelease(display); CG.DisplayRelease(display);
displaysCaptured.Remove(display);
return true; return true;
} }