Reintroduce backend selection through ICED_BACKEND env var
This commit is contained in:
parent
441e9237cd
commit
4f5b63f1f4
8 changed files with 196 additions and 83 deletions
|
|
@ -20,6 +20,18 @@ pub trait Compositor: Sized {
|
|||
fn new<W: Window + Clone>(
|
||||
settings: Settings,
|
||||
compatible_window: W,
|
||||
) -> impl Future<Output = Result<Self, Error>> {
|
||||
Self::with_backend(settings, compatible_window, None)
|
||||
}
|
||||
|
||||
/// Creates a new [`Compositor`] with a backend preference.
|
||||
///
|
||||
/// If the backend does not match the preference, it will return
|
||||
/// [`Error::GraphicsAdapterNotFound`].
|
||||
fn with_backend<W: Window + Clone>(
|
||||
_settings: Settings,
|
||||
_compatible_window: W,
|
||||
_backend: Option<&str>,
|
||||
) -> impl Future<Output = Result<Self, Error>>;
|
||||
|
||||
/// Creates a [`Self::Renderer`] for the [`Compositor`].
|
||||
|
|
@ -130,9 +142,10 @@ impl Compositor for () {
|
|||
type Renderer = ();
|
||||
type Surface = ();
|
||||
|
||||
async fn new<W: Window + Clone>(
|
||||
async fn with_backend<W: Window + Clone>(
|
||||
_settings: Settings,
|
||||
_compatible_window: W,
|
||||
_preffered_backend: Option<&str>,
|
||||
) -> Result<Self, Error> {
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
//! See what can go wrong when creating graphical backends.
|
||||
|
||||
/// An error that occurred while creating an application's graphical context.
|
||||
#[derive(Debug, thiserror::Error)]
|
||||
#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)]
|
||||
pub enum Error {
|
||||
/// The requested backend version is not supported.
|
||||
#[error("the requested backend version is not supported")]
|
||||
|
|
@ -11,9 +13,30 @@ pub enum Error {
|
|||
|
||||
/// A suitable graphics adapter or device could not be found.
|
||||
#[error("a suitable graphics adapter or device could not be found")]
|
||||
GraphicsAdapterNotFound,
|
||||
GraphicsAdapterNotFound {
|
||||
/// The name of the backend where the error happened
|
||||
backend: &'static str,
|
||||
/// The reason why this backend could not be used
|
||||
reason: Reason,
|
||||
},
|
||||
|
||||
/// An error occurred in the context's internal backend
|
||||
#[error("an error occurred in the context's internal backend")]
|
||||
BackendError(String),
|
||||
|
||||
/// Multiple errors occurred
|
||||
#[error("multiple errors occurred: {0:?}")]
|
||||
List(Vec<Self>),
|
||||
}
|
||||
|
||||
/// The reason why a graphics adapter could not be found
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub enum Reason {
|
||||
/// The backend did not match the preference
|
||||
DidNotMatch {
|
||||
/// The preferred backend
|
||||
preferred_backend: String,
|
||||
},
|
||||
/// The request to create the backend failed
|
||||
RequestFailed(String),
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@
|
|||
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
|
||||
mod antialiasing;
|
||||
mod cached;
|
||||
mod error;
|
||||
mod primitive;
|
||||
mod settings;
|
||||
mod viewport;
|
||||
|
|
@ -27,6 +26,7 @@ pub mod backend;
|
|||
pub mod color;
|
||||
pub mod compositor;
|
||||
pub mod damage;
|
||||
pub mod error;
|
||||
pub mod gradient;
|
||||
pub mod mesh;
|
||||
pub mod renderer;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue