ChooseVisual() private method

private ChooseVisual ( IntPtr dpy, int screen, IntPtr attriblist ) : IntPtr
dpy System.IntPtr
screen int
attriblist System.IntPtr
return System.IntPtr
        private IntPtr SelectVisual(GraphicsMode mode)
        {
            Debug.Print("Selecting FB config for {0}", mode);

            var visualAttributes = new List <int>();

            if (mode.ColorFormat.BitsPerPixel > 0)
            {
                if (!mode.ColorFormat.IsIndexed)
                {
                    visualAttributes.Add((int)GLXAttribute.RGBA);
                }

                visualAttributes.Add((int)GLXAttribute.RED_SIZE);
                visualAttributes.Add(mode.ColorFormat.Red);
                visualAttributes.Add((int)GLXAttribute.GREEN_SIZE);
                visualAttributes.Add(mode.ColorFormat.Green);
                visualAttributes.Add((int)GLXAttribute.BLUE_SIZE);
                visualAttributes.Add(mode.ColorFormat.Blue);
                visualAttributes.Add((int)GLXAttribute.ALPHA_SIZE);
                visualAttributes.Add(mode.ColorFormat.Alpha);
            }


            if (mode.Depth > 0)
            {
                visualAttributes.Add((int)GLXAttribute.DEPTH_SIZE);
                visualAttributes.Add(mode.Depth);
            }

            if (mode.Buffers > 1)
            {
                visualAttributes.Add((int)GLXAttribute.DOUBLEBUFFER);
            }

            if (mode.Stencil > 1)
            {
                visualAttributes.Add((int)GLXAttribute.STENCIL_SIZE);
                visualAttributes.Add(mode.Stencil);
            }

            if (mode.AccumulatorFormat.BitsPerPixel > 0)
            {
                visualAttributes.Add((int)GLXAttribute.ACCUM_ALPHA_SIZE);
                visualAttributes.Add(mode.AccumulatorFormat.Alpha);
                visualAttributes.Add((int)GLXAttribute.ACCUM_BLUE_SIZE);
                visualAttributes.Add(mode.AccumulatorFormat.Blue);
                visualAttributes.Add((int)GLXAttribute.ACCUM_GREEN_SIZE);
                visualAttributes.Add(mode.AccumulatorFormat.Green);
                visualAttributes.Add((int)GLXAttribute.ACCUM_RED_SIZE);
                visualAttributes.Add(mode.AccumulatorFormat.Red);
            }

            if (mode.Samples > 0)
            {
                visualAttributes.Add((int)GLXAttribute.SAMPLE_BUFFERS);
                visualAttributes.Add(1);
                visualAttributes.Add((int)GLXAttribute.SAMPLES);
                visualAttributes.Add(mode.Samples);
            }

            if (mode.Stereo)
            {
                visualAttributes.Add((int)GLXAttribute.STEREO);
            }

            visualAttributes.Add(0);

            Debug.Print("Falling back to glXChooseVisual.");
            var display = API.DefaultDisplay;

            using (new XLock(display))
            {
                return(Glx.ChooseVisual(display, Functions.XDefaultScreen(display), visualAttributes.ToArray()));
            }
        }
Example #2
0
        // See http://publib.boulder.ibm.com/infocenter/systems/index.jsp?topic=/com.ibm.aix.opengl/doc/openglrf/glXChooseVisual.htm
        IntPtr SelectVisualUsingChooseVisual(ColorFormat color, int depth, int stencil, int samples, ColorFormat accum,
                                             int buffers, bool stereo)
        {
            List <int> visualAttributes = new List <int>();

            Debug.Print("Bits per pixel: {0}", color.BitsPerPixel);

            if (color.BitsPerPixel > 0)
            {
                if (!color.IsIndexed)
                {
                    visualAttributes.Add((int)GLXAttribute.RGBA);
                }
                visualAttributes.Add((int)GLXAttribute.RED_SIZE);
                visualAttributes.Add(color.Red);
                visualAttributes.Add((int)GLXAttribute.GREEN_SIZE);
                visualAttributes.Add(color.Green);
                visualAttributes.Add((int)GLXAttribute.BLUE_SIZE);
                visualAttributes.Add(color.Blue);
                visualAttributes.Add((int)GLXAttribute.ALPHA_SIZE);
                visualAttributes.Add(color.Alpha);
            }

            Debug.Print("Depth: {0}", depth);

            if (depth > 0)
            {
                visualAttributes.Add((int)GLXAttribute.DEPTH_SIZE);
                visualAttributes.Add(depth);
            }

            if (buffers > 1)
            {
                visualAttributes.Add((int)GLXAttribute.DOUBLEBUFFER);
            }

            if (stencil > 1)
            {
                visualAttributes.Add((int)GLXAttribute.STENCIL_SIZE);
                visualAttributes.Add(stencil);
            }

            if (accum.BitsPerPixel > 0)
            {
                visualAttributes.Add((int)GLXAttribute.ACCUM_ALPHA_SIZE);
                visualAttributes.Add(accum.Alpha);
                visualAttributes.Add((int)GLXAttribute.ACCUM_BLUE_SIZE);
                visualAttributes.Add(accum.Blue);
                visualAttributes.Add((int)GLXAttribute.ACCUM_GREEN_SIZE);
                visualAttributes.Add(accum.Green);
                visualAttributes.Add((int)GLXAttribute.ACCUM_RED_SIZE);
                visualAttributes.Add(accum.Red);
            }

            if (samples > 0)
            {
                visualAttributes.Add((int)GLXAttribute.SAMPLE_BUFFERS);
                visualAttributes.Add(1);
                visualAttributes.Add((int)GLXAttribute.SAMPLES);
                visualAttributes.Add(samples);
            }

            if (stereo)
            {
                visualAttributes.Add((int)GLXAttribute.STEREO);
            }

            visualAttributes.Add(0);

            Debug.Print("Falling back to glXChooseVisual.");
            IntPtr display = API.DefaultDisplay;

            using (new XLock(display))
            {
                return(Glx.ChooseVisual(display, Functions.XDefaultScreen(display), visualAttributes.ToArray()));
            }
        }
Example #3
0
        private IntPtr SelectVisualUsingChooseVisual(ColorFormat color, int depth, int stencil, int samples, ColorFormat accum, int buffers, bool stereo)
        {
            List <int> list = new List <int>();

            if (color.BitsPerPixel > 0)
            {
                if (!color.IsIndexed)
                {
                    list.Add(4);
                }
                list.Add(8);
                list.Add(color.Red);
                list.Add(9);
                list.Add(color.Green);
                list.Add(10);
                list.Add(color.Blue);
                list.Add(11);
                list.Add(color.Alpha);
            }
            if (depth > 0)
            {
                list.Add(12);
                list.Add(depth);
            }
            if (buffers > 1)
            {
                list.Add(5);
            }
            if (stencil > 1)
            {
                list.Add(13);
                list.Add(stencil);
            }
            if (accum.BitsPerPixel > 0)
            {
                list.Add(17);
                list.Add(accum.Alpha);
                list.Add(16);
                list.Add(accum.Blue);
                list.Add(15);
                list.Add(accum.Green);
                list.Add(14);
                list.Add(accum.Red);
            }
            if (samples > 0)
            {
                list.Add(100000);
                list.Add(1);
                list.Add(100001);
                list.Add(samples);
            }
            if (stereo)
            {
                list.Add(6);
            }
            list.Add(0);
            IntPtr defaultDisplay = API.DefaultDisplay;

            using (new XLock(defaultDisplay))
                return(Glx.ChooseVisual(defaultDisplay, Functions.XDefaultScreen(defaultDisplay), list.ToArray()));
        }
Example #4
0
 public static unsafe IntPtr ChooseVisual(IntPtr dpy, int screen, int[] attriblist)
 {
     fixed(int *numPtr = attriblist)
     return(Glx.ChooseVisual(dpy, screen, (IntPtr)((void *)numPtr)));
 }