public GraphicsMode SelectGraphicsMode(ColorFormat color, int depth, int stencil, int samples, ColorFormat accum, int buffers, bool stereo, RenderableFlags renderable_flags) { IntPtr[] configs = new IntPtr[1]; int[] attribList = new int[] { //Egl.SURFACE_TYPE, Egl.WINDOW_BIT, Egl.RENDERABLE_TYPE, (int)renderable_flags, Egl.RED_SIZE, color.Red, Egl.GREEN_SIZE, color.Green, Egl.BLUE_SIZE, color.Blue, Egl.ALPHA_SIZE, color.Alpha, Egl.DEPTH_SIZE, depth > 0 ? depth : 0, Egl.STENCIL_SIZE, stencil > 0 ? stencil : 0, Egl.SAMPLE_BUFFERS, samples > 0 ? 1 : 0, Egl.SAMPLES, samples > 0 ? samples : 0, Egl.NONE, }; // Todo: what if we don't wish to use the default display? IntPtr display = Egl.GetDisplay(IntPtr.Zero); int major, minor; if (!Egl.Initialize(display, out major, out minor)) { throw new GraphicsModeException(String.Format("Failed to initialize display connection, error {0}", Egl.GetError())); } int num_configs; if (!Egl.ChooseConfig(display, attribList, configs, configs.Length, out num_configs) || num_configs == 0) { throw new GraphicsModeException(String.Format("Failed to retrieve GraphicsMode, error {0}", Egl.GetError())); } // See what we really got IntPtr active_config = configs[0]; int r, g, b, a; Egl.GetConfigAttrib(display, active_config, Egl.RED_SIZE, out r); Egl.GetConfigAttrib(display, active_config, Egl.GREEN_SIZE, out g); Egl.GetConfigAttrib(display, active_config, Egl.BLUE_SIZE, out b); Egl.GetConfigAttrib(display, active_config, Egl.ALPHA_SIZE, out a); int d, s; Egl.GetConfigAttrib(display, active_config, Egl.DEPTH_SIZE, out d); Egl.GetConfigAttrib(display, active_config, Egl.STENCIL_SIZE, out s); int sample_buffers; Egl.GetConfigAttrib(display, active_config, Egl.SAMPLES, out sample_buffers); Egl.GetConfigAttrib(display, active_config, Egl.SAMPLES, out samples); return(new GraphicsMode(active_config, new ColorFormat(r, g, b, a), d, s, sample_buffers > 0 ? samples : 0, 0, 2, false)); }
public GraphicsMode SelectGraphicsMode(EglWindowInfo window, GraphicsMode mode, RenderableFlags flags) { return(SelectGraphicsMode(window, mode.ColorFormat, mode.Depth, mode.Stencil, mode.Samples, mode.AccumulatorFormat, mode.Buffers, mode.Stereo, flags)); }
public GraphicsMode SelectGraphicsMode(EglWindowInfo window, GraphicsMode mode, RenderableFlags flags) { return SelectGraphicsMode(window, mode.ColorFormat, mode.Depth, mode.Stencil, mode.Samples, mode.AccumulatorFormat, mode.Buffers, mode.Stereo, flags); }
protected override IntPtr GetStaticAddress(IntPtr function, RenderableFlags renderable) { if ((renderable & (RenderableFlags.ES2 | RenderableFlags.ES3)) != 0 && ES2 != IntPtr.Zero) { return(Kernel32.GetProcAddress(ES2, function)); } return(IntPtr.Zero); }
public GraphicsMode SelectGraphicsMode(EglWindowInfo window, ColorFormat color, int depth, int stencil, int samples, ColorFormat accum, int buffers, bool stereo, RenderableFlags renderableFlags) { return(SelectGraphicsMode( SurfaceType.WINDOW_BIT, window.Display, color, depth, stencil, samples, accum, buffers, stereo, renderableFlags)); }
int swap_interval = 1; // Default interval is defined as 1 in EGL. #endregion #region Constructors public EglContext(GraphicsMode mode, EglWindowInfo window, IGraphicsContext sharedContext, int major, int minor, GraphicsContextFlags flags) { if (mode == null) { throw new ArgumentNullException("mode"); } if (window == null) { throw new ArgumentNullException("window"); } EglContext shared = (EglContext)sharedContext; WindowInfo = window; // Select an EGLConfig that matches the desired mode. We cannot use the 'mode' // parameter directly, since it may have originated on a different system (e.g. GLX) // and it may not support the desired renderer. Renderable = RenderableFlags.GL; if ((flags & GraphicsContextFlags.Embedded) != 0) { Renderable = major > 1 ? RenderableFlags.ES2 : RenderableFlags.ES; } RenderApi api = (Renderable & RenderableFlags.GL) != 0 ? RenderApi.GL : RenderApi.ES; Debug.Print("[EGL] Binding {0} rendering API.", api); if (!Egl.BindAPI(api)) { Debug.Print("[EGL] Failed to bind rendering API. Error: {0}", Egl.GetError()); } Mode = new EglGraphicsMode().SelectGraphicsMode(window, mode.ColorFormat, mode.Depth, mode.Stencil, mode.Samples, mode.AccumulatorFormat, mode.Buffers, mode.Stereo, Renderable); if (!Mode.Index.HasValue) { throw new GraphicsModeException("Invalid or unsupported GraphicsMode."); } IntPtr config = Mode.Index.Value; if (window.Surface == IntPtr.Zero) { window.CreateWindowSurface(config); } int[] attrib_list = new int[] { Egl.CONTEXT_CLIENT_VERSION, major, Egl.NONE }; HandleAsEGLContext = Egl.CreateContext(window.Display, config, shared != null ? shared.HandleAsEGLContext : IntPtr.Zero, attrib_list); MakeCurrent(window); }
protected override IntPtr GetStaticAddress(IntPtr function, RenderableFlags renderable) { if ((renderable & RenderableFlags.ES) != 0 && ES1 != IntPtr.Zero) { return(X11.DL.Symbol(ES1, function)); } else if ((renderable & RenderableFlags.ES2) != 0 && ES2 != IntPtr.Zero) { return(X11.DL.Symbol(ES2, function)); } return(IntPtr.Zero); }
protected override IntPtr GetStaticAddress(IntPtr function, RenderableFlags renderable) { if ((renderable & RenderableFlags.ES) != 0 && ES1 != IntPtr.Zero) { return Windows.Functions.GetProcAddress(ES1, function); } else if ((renderable & RenderableFlags.ES2) != 0 && ES2 != IntPtr.Zero) { return Windows.Functions.GetProcAddress(ES2, function); } return IntPtr.Zero; }
protected override IntPtr GetStaticAddress(IntPtr function, RenderableFlags renderable) { if ((renderable & RenderableFlags.ES) != 0 && ES1 != IntPtr.Zero) { return X11.DL.Symbol(ES1, function); } else if ((renderable & RenderableFlags.ES2) != 0 && ES2 != IntPtr.Zero) { return X11.DL.Symbol(ES2, function); } return IntPtr.Zero; }
protected override IntPtr GetStaticAddress(IntPtr function, RenderableFlags renderable) { if ((renderable & RenderableFlags.ES) != 0 && ES1 != IntPtr.Zero) { return(Windows.Functions.GetProcAddress(ES1, function)); } else if ((renderable & RenderableFlags.ES2) != 0 && ES2 != IntPtr.Zero) { return(Windows.Functions.GetProcAddress(ES2, function)); } return(IntPtr.Zero); }
public GraphicsMode SelectGraphicsMode(SurfaceType surfaceType, IntPtr display, ColorFormat color, int depth, int stencil, int samples, ColorFormat accum, int buffers, bool stereo, RenderableFlags renderableFlags) { var configs = new IntPtr[1]; var attribList = new[] { Egl.SURFACE_TYPE, (int)surfaceType, Egl.RENDERABLE_TYPE, (int)renderableFlags, Egl.RED_SIZE, color.Red, Egl.GREEN_SIZE, color.Green, Egl.BLUE_SIZE, color.Blue, Egl.ALPHA_SIZE, color.Alpha, Egl.DEPTH_SIZE, depth > 0 ? depth : 0, Egl.STENCIL_SIZE, stencil > 0 ? stencil : 0, Egl.SAMPLE_BUFFERS, samples > 0 ? 1 : 0, Egl.SAMPLES, samples > 0 ? samples : 0, Egl.NONE }; int numConfigs; if (!Egl.ChooseConfig(display, attribList, configs, configs.Length, out numConfigs) || numConfigs == 0) { throw new GraphicsModeException($"Failed to retrieve GraphicsMode, error {Egl.GetError()}"); } // See what we really got var activeConfig = configs[0]; int r, g, b, a; Egl.GetConfigAttrib(display, activeConfig, Egl.RED_SIZE, out r); Egl.GetConfigAttrib(display, activeConfig, Egl.GREEN_SIZE, out g); Egl.GetConfigAttrib(display, activeConfig, Egl.BLUE_SIZE, out b); Egl.GetConfigAttrib(display, activeConfig, Egl.ALPHA_SIZE, out a); int d, s; Egl.GetConfigAttrib(display, activeConfig, Egl.DEPTH_SIZE, out d); Egl.GetConfigAttrib(display, activeConfig, Egl.STENCIL_SIZE, out s); int sampleBuffers; Egl.GetConfigAttrib(display, activeConfig, Egl.SAMPLES, out sampleBuffers); Egl.GetConfigAttrib(display, activeConfig, Egl.SAMPLES, out samples); return(new GraphicsMode(activeConfig, new ColorFormat(r, g, b, a), d, s, sampleBuffers > 0 ? samples : 0, 0, 2, false)); }
public GraphicsMode SelectGraphicsMode(ColorFormat color, int depth, int stencil, int samples, ColorFormat accum, int buffers, bool stereo, RenderableFlags renderable_flags) { IntPtr[] configs = new IntPtr[1]; int[] attribList = new int[] { //Egl.SURFACE_TYPE, Egl.WINDOW_BIT, Egl.RENDERABLE_TYPE, (int)renderable_flags, Egl.RED_SIZE, color.Red, Egl.GREEN_SIZE, color.Green, Egl.BLUE_SIZE, color.Blue, Egl.ALPHA_SIZE, color.Alpha, Egl.DEPTH_SIZE, depth > 0 ? depth : 0, Egl.STENCIL_SIZE, stencil > 0 ? stencil : 0, //Egl.SAMPLE_BUFFERS, samples > 0 ? 1 : 0, Egl.SAMPLES, samples > 0 ? samples : 0, Egl.NONE, }; // Todo: what if we don't wish to use the default display? IntPtr display = Egl.GetDisplay(IntPtr.Zero); int major, minor; if (!Egl.Initialize(display, out major, out minor)) throw new GraphicsModeException(String.Format("Failed to initialize display connection, error {0}", Egl.GetError())); int num_configs; if (!Egl.ChooseConfig(display, attribList, configs, configs.Length, out num_configs) || num_configs == 0) { throw new GraphicsModeException(String.Format("Failed to retrieve GraphicsMode, error {0}", Egl.GetError())); } // See what we really got IntPtr active_config = configs[0]; int r, g, b, a; Egl.GetConfigAttrib(display, active_config, Egl.RED_SIZE, out r); Egl.GetConfigAttrib(display, active_config, Egl.GREEN_SIZE, out g); Egl.GetConfigAttrib(display, active_config, Egl.BLUE_SIZE, out b); Egl.GetConfigAttrib(display, active_config, Egl.ALPHA_SIZE, out a); int d, s; Egl.GetConfigAttrib(display, active_config, Egl.DEPTH_SIZE, out d); Egl.GetConfigAttrib(display, active_config, Egl.STENCIL_SIZE, out s); int sample_buffers; Egl.GetConfigAttrib(display, active_config, Egl.SAMPLES, out sample_buffers); Egl.GetConfigAttrib(display, active_config, Egl.SAMPLES, out samples); return new GraphicsMode(active_config, new ColorFormat(r, g, b, a), d, s, sample_buffers > 0 ? samples : 0, 0, 2, false); }
protected override IntPtr GetStaticAddress(IntPtr function, RenderableFlags renderable) { if ((renderable & (RenderableFlags.ES2 | RenderableFlags.ES3)) != 0 && ES2 != IntPtr.Zero) { return(DL.Symbol(ES2, function)); } if ((renderable & RenderableFlags.GL) != 0 && GL != IntPtr.Zero) { return(DL.Symbol(GL, function)); } return(IntPtr.Zero); }
public GraphicsMode SelectGraphicsMode(ColorFormat color, int depth, int stencil, int samples, ColorFormat accum, int buffers, bool stereo, RenderableFlags renderable_flags) { IntPtr[] configs = new IntPtr[1]; int[] attrib_list = new int[17] { 12352, (int) renderable_flags, 12324, color.Red, 12323, color.Green, 12322, color.Blue, 12321, color.Alpha, 12325, depth > 0 ? depth : 0, 12326, stencil > 0 ? stencil : 0, 12337, samples > 0 ? samples : 0, 12344 }; IntPtr display = Egl.GetDisplay(IntPtr.Zero); int major; int minor; if (!Egl.Initialize(display, out major, out minor)) throw new GraphicsModeException(string.Format("Failed to initialize display connection, error {0}", (object) Egl.GetError())); int num_config; if (!Egl.ChooseConfig(display, attrib_list, configs, configs.Length, out num_config) || num_config == 0) throw new GraphicsModeException(string.Format("Failed to retrieve GraphicsMode, error {0}", (object) Egl.GetError())); IntPtr config = configs[0]; int red; Egl.GetConfigAttrib(display, config, 12324, out red); int green; Egl.GetConfigAttrib(display, config, 12323, out green); int blue; Egl.GetConfigAttrib(display, config, 12322, out blue); int alpha; Egl.GetConfigAttrib(display, config, 12321, out alpha); int depth1; Egl.GetConfigAttrib(display, config, 12325, out depth1); int stencil1; Egl.GetConfigAttrib(display, config, 12326, out stencil1); int num; Egl.GetConfigAttrib(display, config, 12337, out num); Egl.GetConfigAttrib(display, config, 12337, out samples); return new GraphicsMode(new IntPtr?(config), new ColorFormat(red, green, blue, alpha), depth1, stencil1, num > 0 ? samples : 0, (ColorFormat) 0, 2, false); }
int swap_interval = 1; // Default interval is defined as 1 in EGL. #endregion #region Constructors public EglContext(GraphicsMode mode, EglWindowInfo window, IGraphicsContext sharedContext, int major, int minor, GraphicsContextFlags flags) { if (mode == null) throw new ArgumentNullException("mode"); if (window == null) throw new ArgumentNullException("window"); EglContext shared = (EglContext)sharedContext; WindowInfo = window; // Select an EGLConfig that matches the desired mode. We cannot use the 'mode' // parameter directly, since it may have originated on a different system (e.g. GLX) // and it may not support the desired renderer. Renderable = RenderableFlags.GL; if ((flags & GraphicsContextFlags.Embedded) != 0) { Renderable = major > 1 ? RenderableFlags.ES2 : RenderableFlags.ES; } RenderApi api = (Renderable & RenderableFlags.GL) != 0 ? RenderApi.GL : RenderApi.ES; Debug.Print("[EGL] Binding {0} rendering API.", api); if (!Egl.BindAPI(api)) { Debug.Print("[EGL] Failed to bind rendering API. Error: {0}", Egl.GetError()); } Mode = new EglGraphicsMode().SelectGraphicsMode(window, mode.ColorFormat, mode.Depth, mode.Stencil, mode.Samples, mode.AccumulatorFormat, mode.Buffers, mode.Stereo, Renderable); if (!Mode.Index.HasValue) throw new GraphicsModeException("Invalid or unsupported GraphicsMode."); IntPtr config = Mode.Index.Value; if (window.Surface == IntPtr.Zero) window.CreateWindowSurface(config); int[] attrib_list = new int[] { Egl.CONTEXT_CLIENT_VERSION, major, Egl.NONE }; HandleAsEGLContext = Egl.CreateContext(window.Display, config, shared != null ? shared.HandleAsEGLContext : IntPtr.Zero, attrib_list); MakeCurrent(window); }
private int swap_interval = 1; // Default interval is defined as 1 in EGL. public EglContext(GraphicsMode mode, EglWindowInfo window, IGraphicsContext sharedContext, int major, int minor, GraphicsContextFlags flags) { if (mode == null) { throw new ArgumentNullException("mode"); } if (window == null) { throw new ArgumentNullException("window"); } EglContext shared = GetSharedEglContext(sharedContext); WindowInfo = window; // Select an EGLConfig that matches the desired mode. We cannot use the 'mode' // parameter directly, since it may have originated on a different system (e.g. GLX) // and it may not support the desired renderer. Renderable = RenderableFlags.GL; if ((flags & GraphicsContextFlags.Embedded) != 0) { switch (major) { case 3: Renderable = RenderableFlags.ES3; break; case 2: Renderable = RenderableFlags.ES2; break; default: Renderable = RenderableFlags.ES; break; } } RenderApi api = (Renderable & RenderableFlags.GL) != 0 ? RenderApi.GL : RenderApi.ES; Debug.Print("[EGL] Binding {0} rendering API.", api); if (!Egl.BindAPI(api)) { Debug.Print("[EGL] Failed to bind rendering API. Error: {0}", Egl.GetError()); } bool offscreen = (flags & GraphicsContextFlags.Offscreen) != 0; SurfaceType surfaceType = offscreen ? SurfaceType.PBUFFER_BIT : SurfaceType.WINDOW_BIT; Mode = new EglGraphicsMode().SelectGraphicsMode(surfaceType, window.Display, mode.ColorFormat, mode.Depth, mode.Stencil, mode.Samples, mode.AccumulatorFormat, mode.Buffers, mode.Stereo, Renderable); if (!Mode.Index.HasValue) { throw new GraphicsModeException("Invalid or unsupported GraphicsMode."); } IntPtr config = Mode.Index.Value; if (window.Surface == IntPtr.Zero) { if (!offscreen) { window.CreateWindowSurface(config); } else { window.CreatePbufferSurface(config); } } int[] attribList = { Egl.CONTEXT_CLIENT_VERSION, major, Egl.NONE }; var shareContext = shared?.HandleAsEGLContext ?? IntPtr.Zero; HandleAsEGLContext = Egl.CreateContext(window.Display, config, shareContext, attribList); GraphicsContextFlags = flags; }
protected abstract IntPtr GetStaticAddress(IntPtr function, RenderableFlags renderable);
protected override IntPtr GetStaticAddress(IntPtr function, RenderableFlags renderable) { return(IntPtr.Zero); }
public GraphicsMode SelectGraphicsMode(ColorFormat color, int depth, int stencil, int samples, ColorFormat accum, int buffers, bool stereo, RenderableFlags renderable_flags) { IntPtr[] configs = new IntPtr[1]; int[] attrib_list = new int[17] { 12352, (int)renderable_flags, 12324, color.Red, 12323, color.Green, 12322, color.Blue, 12321, color.Alpha, 12325, depth > 0 ? depth : 0, 12326, stencil > 0 ? stencil : 0, 12337, samples > 0 ? samples : 0, 12344 }; IntPtr display = Egl.GetDisplay(IntPtr.Zero); int major; int minor; if (!Egl.Initialize(display, out major, out minor)) { throw new GraphicsModeException(string.Format("Failed to initialize display connection, error {0}", (object)Egl.GetError())); } int num_config; if (!Egl.ChooseConfig(display, attrib_list, configs, configs.Length, out num_config) || num_config == 0) { throw new GraphicsModeException(string.Format("Failed to retrieve GraphicsMode, error {0}", (object)Egl.GetError())); } IntPtr config = configs[0]; int red; Egl.GetConfigAttrib(display, config, 12324, out red); int green; Egl.GetConfigAttrib(display, config, 12323, out green); int blue; Egl.GetConfigAttrib(display, config, 12322, out blue); int alpha; Egl.GetConfigAttrib(display, config, 12321, out alpha); int depth1; Egl.GetConfigAttrib(display, config, 12325, out depth1); int stencil1; Egl.GetConfigAttrib(display, config, 12326, out stencil1); int num; Egl.GetConfigAttrib(display, config, 12337, out num); Egl.GetConfigAttrib(display, config, 12337, out samples); return(new GraphicsMode(new IntPtr?(config), new ColorFormat(red, green, blue, alpha), depth1, stencil1, num > 0 ? samples : 0, (ColorFormat)0, 2, false)); }
public GraphicsMode SelectGraphicsMode(SurfaceType surface_type, IntPtr display, ColorFormat color, int depth, int stencil, int samples, ColorFormat accum, int buffers, bool stereo, RenderableFlags renderable_flags, bool fullscreen) { IntPtr[] configs = new IntPtr[1]; int[] attribList = new int[] { Egl.SURFACE_TYPE, (int)surface_type, Egl.RENDERABLE_TYPE, (int)renderable_flags, Egl.RED_SIZE, color.Red, Egl.GREEN_SIZE, color.Green, Egl.BLUE_SIZE, color.Blue, Egl.ALPHA_SIZE, color.Alpha, Egl.DEPTH_SIZE, depth > 0 ? depth : 0, Egl.STENCIL_SIZE, stencil > 0 ? stencil : 0, Egl.SAMPLE_BUFFERS, samples > 0 ? 1 : 0, Egl.SAMPLES, samples > 0 ? samples : 0, Egl.FULLSCREEN_ANGLE, fullscreen ? Egl.TRUE : Egl.FALSE, Egl.NONE, }; int num_configs; if (!Egl.ChooseConfig(display, attribList, configs, configs.Length, out num_configs)) { throw new GraphicsModeException(String.Format("Failed to retrieve GraphicsMode, error {0}", Egl.GetError())); } if (num_configs == 0) { if (depth > 0) { return(SelectGraphicsMode(surface_type, display, color, 0, stencil, samples, accum, buffers, stereo, renderable_flags, fullscreen)); } throw new GraphicsModeException(String.Format("Failed to retrieve GraphicsMode, no fitting configurations, error {0}", Egl.GetError())); } // See what we really got IntPtr active_config = configs[0]; int r, g, b, a; Egl.GetConfigAttrib(display, active_config, Egl.RED_SIZE, out r); Egl.GetConfigAttrib(display, active_config, Egl.GREEN_SIZE, out g); Egl.GetConfigAttrib(display, active_config, Egl.BLUE_SIZE, out b); Egl.GetConfigAttrib(display, active_config, Egl.ALPHA_SIZE, out a); int d, s; Egl.GetConfigAttrib(display, active_config, Egl.DEPTH_SIZE, out d); Egl.GetConfigAttrib(display, active_config, Egl.STENCIL_SIZE, out s); int sample_buffers; Egl.GetConfigAttrib(display, active_config, Egl.SAMPLES, out sample_buffers); Egl.GetConfigAttrib(display, active_config, Egl.SAMPLES, out samples); return(new GraphicsMode(active_config, new ColorFormat(r, g, b, a), d, s, sample_buffers > 0 ? samples : 0, 0, 2, false)); }