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())); } }
// 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())); } }
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())); }
public static unsafe IntPtr ChooseVisual(IntPtr dpy, int screen, int[] attriblist) { fixed(int *numPtr = attriblist) return(Glx.ChooseVisual(dpy, screen, (IntPtr)((void *)numPtr))); }