iced icon indicating copy to clipboard operation
iced copied to clipboard

Support choosing a `Renderer` at runtime

Open hecrj opened this issue 2 years ago • 0 comments

Currently, iced forces users to pick a Renderer implementation at compilation time via feature flags (iced_wgpu, iced_glow, etc.).

However, each renderer has its tradeoffs and GUI applications may want to ship different renderers in the same binary to improve compatibility, performance, and correctness.

iced should allow users to enable renderers via feature flags in a non-exclusive way. Then, users could set the priority for each renderer in the Settings of an Application. For instance:

Application::run(Settings {
    renderers: [Renderer::Wgpu, Renderer::Glow],
    ..Settings::default()
})

I believe that in order to achieve this we will need to create a couple of new subcrates:

  • iced_renderer on top of iced_wgpu and iced_glow and implementing a Renderer that picks its internal backend at runtime.
  • iced_shell on top of iced_winit andiced_glutin implementing a generic shell that spawns and manages windows for the chosen renderer.

Once we have these, it should be relatively straightforward to change the root crate and extend the Settings struct.

hecrj avatar Jan 18 '22 06:01 hecrj