コード例 #1
0
 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());
 }
コード例 #2
0
        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;
        }
コード例 #3
0
ファイル: JoglDriver.cs プロジェクト: optimus-code/Q2Sharp
        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);
        }