public unsafe DisplayMode[] getModeList() { return(GLFW.GetVideoModes(GLFW.GetPrimaryMonitor()) .Where(videoMode => videoMode.RedBits + videoMode.GreenBits + videoMode.BlueBits == this.oldDisplayMode.BitDepth) .GroupBy(videoMode => $"{videoMode.Height},{videoMode.Height}") .Select(videoModes => videoModes.OrderBy(videoMode => videoMode.RefreshRate).Last()) .OrderBy(videoMode => videoMode.Width) .ThenBy(videoMode => videoMode.Height) .Select( videoMode => new DisplayMode( videoMode.Width, videoMode.Height, videoMode.RefreshRate, videoMode.RedBits + videoMode.GreenBits + videoMode.BlueBits ) ) .ToArray()); }
protected override unsafe void GetAvailableModes( ) { var availableResolutions = GLFW.GetVideoModes(this.OpenTKDevice); var tmp = new List <VideoMode>(availableResolutions.Length); foreach (var res in availableResolutions) { if (res.RedBits + res.GreenBits + res.BlueBits <= 8) { continue; } Predicate <VideoMode> SameMode = delegate(VideoMode m) { return(m.Width == res.Width && m.Height == res.Height && m.BitsPerPixel == res.RedBits + res.GreenBits + res.BlueBits); }; if (tmp.Exists(SameMode)) { continue; } var mode = new VideoMode( ); mode.Width = res.Width; mode.Height = res.Height; mode.BitsPerPixel = res.RedBits + res.GreenBits + res.BlueBits; mode.RefreshRate = res.RefreshRate; tmp.Add(mode); } this.AvailableModes = tmp.ToArray( ); var current = *GLFW.GetVideoMode(this.OpenTKDevice); this.FirstAvailableMode = new(); this.FirstAvailableMode.Width = current.Width; this.FirstAvailableMode.Height = current.Height; this.FirstAvailableMode.BitsPerPixel = current.RedBits + current.GreenBits + current.BlueBits; this.FirstAvailableMode.RefreshRate = current.RefreshRate; this.FirstAvailableMode.FullScreen = true; }
public virtual VideoMode[] GetModeList() { VideoMode[] modes = null; unsafe { var ptr = (OpenTK.Windowing.GraphicsLibraryFramework.Monitor *)window.CurrentMonitor.Pointer.ToPointer(); modes = GLFW.GetVideoModes(ptr); } LinkedList <VideoMode> l = new LinkedList <VideoMode>(); l.AddLast(oldDisplayMode.Value); for (int i = 0; i < modes.Length; i++) { VideoMode m = modes[i]; if (m.RedBits + m.GreenBits + m.BlueBits != oldDisplayMode.Value.RedBits + oldDisplayMode.Value.GreenBits + oldDisplayMode.Value.BlueBits) { continue; } if (m.RefreshRate > oldDisplayMode.Value.RefreshRate) { continue; } if (m.Width < 240 || m.Width < 320) { continue; } int j = 0; VideoMode ml = default; for (j = 0; j < l.Count; j++) { ml = (VideoMode)l.ElementAt(j); if (ml.Width > m.Width) { break; } if (ml.Width == m.Width && ml.Height >= m.Height) { break; } } if (j == l.Count) { l.AddLast(m); } else if (ml.Width > m.Width || ml.Height > m.Height) { l.AddBefore(l.Find(ml), m); } else if (m.RefreshRate > ml.RefreshRate) { l.AddBefore(l.Find(ml), m); l.Remove(l.Find(ml)); } } VideoMode[] ma = new VideoMode[l.Count]; ma = l.ToArray(); return(ma); }