diff options
author | 2021-12-15 02:07:13 -0300 | |
---|---|---|
committer | 2022-01-19 17:40:17 -0300 | |
commit | 230db88fb2d9454eb13bc4e260723f57f6c4dabe (patch) | |
tree | 5c84f48fe537be6182c8f1599c15b14e5c4305f0 | |
parent | 46fb27b104fda99640cca625934ababeca8fd19a (diff) | |
download | iced-230db88fb2d9454eb13bc4e260723f57f6c4dabe.tar.gz iced-230db88fb2d9454eb13bc4e260723f57f6c4dabe.tar.bz2 iced-230db88fb2d9454eb13bc4e260723f57f6c4dabe.zip |
Add setting to try OpenGL ES first
-rw-r--r-- | glutin/src/application.rs | 20 | ||||
-rw-r--r-- | src/settings.rs | 12 | ||||
-rw-r--r-- | winit/src/settings.rs | 6 |
3 files changed, 34 insertions, 4 deletions
diff --git a/glutin/src/application.rs b/glutin/src/application.rs index 88e67220..27a932fc 100644 --- a/glutin/src/application.rs +++ b/glutin/src/application.rs @@ -61,11 +61,23 @@ where settings.id, ); - let context = ContextBuilder::new() + let opengl_builder = ContextBuilder::new() .with_vsync(true) - // .with_gl(glutin::GlRequest::Specific(glutin::Api::OpenGlEs, (2, 0))) - .with_multisampling(C::sample_count(&compositor_settings) as u16) - .build_windowed(builder, &event_loop) + .with_multisampling(C::sample_count(&compositor_settings) as u16); + + let opengles_builder = opengl_builder.clone().with_gl( + glutin::GlRequest::Specific(glutin::Api::OpenGlEs, (2, 0)), + ); + + let (first_builder, second_builder) = if settings.try_opengles_first { + (opengles_builder, opengl_builder) + } else { + (opengl_builder, opengles_builder) + }; + + let context = first_builder + .build_windowed(builder.clone(), &event_loop) + .or_else(|_| second_builder.build_windowed(builder, &event_loop)) .map_err(|error| { use glutin::CreationError; diff --git a/src/settings.rs b/src/settings.rs index f7940a0b..c521a62a 100644 --- a/src/settings.rs +++ b/src/settings.rs @@ -55,6 +55,15 @@ pub struct Settings<Flags> { /// /// [`Application`]: crate::Application pub exit_on_close_request: bool, + + /// Whether the [`Application`] should try to build the context + /// using OpenGL ES first then OpenGL. + /// + /// By default, it is disabled. + /// **Note:** Only works for the `glow` backend. + /// + /// [`Application`]: crate::Application + pub try_opengles_first: bool, } impl<Flags> Settings<Flags> { @@ -73,6 +82,7 @@ impl<Flags> Settings<Flags> { text_multithreading: default_settings.text_multithreading, antialiasing: default_settings.antialiasing, exit_on_close_request: default_settings.exit_on_close_request, + try_opengles_first: default_settings.try_opengles_first, } } } @@ -91,6 +101,7 @@ where text_multithreading: false, antialiasing: false, exit_on_close_request: true, + try_opengles_first: false, } } } @@ -103,6 +114,7 @@ impl<Flags> From<Settings<Flags>> for iced_winit::Settings<Flags> { window: settings.window.into(), flags: settings.flags, exit_on_close_request: settings.exit_on_close_request, + try_opengles_first: settings.try_opengles_first, } } } diff --git a/winit/src/settings.rs b/winit/src/settings.rs index 045cb156..9a93824a 100644 --- a/winit/src/settings.rs +++ b/winit/src/settings.rs @@ -38,6 +38,12 @@ pub struct Settings<Flags> { /// Whether the [`Application`] should exit when the user requests the /// window to close (e.g. the user presses the close button). pub exit_on_close_request: bool, + + /// Whether the [`Application`] should try to build the context + /// using OpenGL ES first then OpenGL. + /// + /// NOTE: Only works for the `glow` backend. + pub try_opengles_first: bool, } /// The window settings of an application. |