public void InitGraphics() { var colorFormat = new ColorFormat(32); var graphicsMode = new GraphicsMode(colorFormat, 24, 8); var display = GdkApi.gdk_x11_display_get_xdisplay(Control.Display.Handle); var screen = Control.Screen.Number; var windowHandle = GdkApi.gdk_x11_drawable_get_xid(Control.GdkWindow.Handle); var rootWindow = GdkApi.gdk_x11_drawable_get_xid(Control.RootWindow.Handle); IntPtr visualInfo; if (graphicsMode.Index.HasValue) { var xVisualInfo = new XVisualInfo { VisualID = graphicsMode.Index.Value }; int dummy; visualInfo = XApi.XGetVisualInfo(display, (IntPtr)XVisualInfoMask.ID, ref xVisualInfo, out dummy); } else { visualInfo = GlxApi.glXChooseVisual(display, Control.Screen.Number, new[] { GlxApi.GLX_RGBA, GlxApi.GLX_DOUBLEBUFFER, GlxApi.GLX_RED_SIZE, 8, GlxApi.GLX_GREEN_SIZE, 8, GlxApi.GLX_BLUE_SIZE, 8, GlxApi.GLX_ALPHA_SIZE, 8, GlxApi.GLX_DEPTH_SIZE, 24, GlxApi.GLX_STENCIL_SIZE, 8, GlxApi.GLX_NONE }); } windowInfo = Utilities.CreateX11WindowInfo(display, screen, windowHandle, rootWindow, visualInfo); graphicsContext = new GraphicsContext(graphicsMode, windowInfo); graphicsContext.MakeCurrent(windowInfo); graphicsContext.LoadAll(); graphicsContext.SwapInterval = 1; }