Skip to content

Commit

Permalink
Add setting to try OpenGL ES first
Browse files Browse the repository at this point in the history
  • Loading branch information
derezzedex committed Jan 4, 2022
1 parent facdadf commit d5bb93d
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 4 deletions.
20 changes: 16 additions & 4 deletions glutin/src/application.rs
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,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;

Expand Down
12 changes: 12 additions & 0 deletions src/settings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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> {
Expand All @@ -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,
}
}
}
Expand All @@ -91,6 +101,7 @@ where
text_multithreading: false,
antialiasing: false,
exit_on_close_request: true,
try_opengles_first: false,
}
}
}
Expand All @@ -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,
}
}
}
6 changes: 6 additions & 0 deletions winit/src/settings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down

0 comments on commit d5bb93d

Please sign in to comment.