pub struct Painter {
configuration: WgpuConfiguration,
msaa_samples: u32,
support_transparent_backbuffer: bool,
dithering: bool,
depth_format: Option<TextureFormat>,
screen_capture_state: Option<CaptureState>,
instance: Instance,
render_state: Option<RenderState>,
depth_texture_view: HashMap<ViewportId, TextureView, BuildHasherDefault<NoHashHasher<ViewportId>>>,
msaa_texture_view: HashMap<ViewportId, TextureView, BuildHasherDefault<NoHashHasher<ViewportId>>>,
surfaces: HashMap<ViewportId, SurfaceState, BuildHasherDefault<NoHashHasher<ViewportId>>>,
}
Expand description
Everything you need to paint egui with wgpu
on [winit
].
Alternatively you can use crate::Renderer
directly.
NOTE: all egui viewports share the same painter.
Fields§
§configuration: WgpuConfiguration
§msaa_samples: u32
§support_transparent_backbuffer: bool
§dithering: bool
§depth_format: Option<TextureFormat>
§screen_capture_state: Option<CaptureState>
§instance: Instance
§render_state: Option<RenderState>
§depth_texture_view: HashMap<ViewportId, TextureView, BuildHasherDefault<NoHashHasher<ViewportId>>>
§msaa_texture_view: HashMap<ViewportId, TextureView, BuildHasherDefault<NoHashHasher<ViewportId>>>
§surfaces: HashMap<ViewportId, SurfaceState, BuildHasherDefault<NoHashHasher<ViewportId>>>
Implementations§
§impl Painter
impl Painter
pub fn new(
configuration: WgpuConfiguration,
msaa_samples: u32,
depth_format: Option<TextureFormat>,
support_transparent_backbuffer: bool,
dithering: bool
) -> Painter
pub fn new( configuration: WgpuConfiguration, msaa_samples: u32, depth_format: Option<TextureFormat>, support_transparent_backbuffer: bool, dithering: bool ) -> Painter
Manages wgpu
state, including surface state, required to render egui.
Only the wgpu::Instance
is initialized here. Device selection and the initialization
of render + surface state is deferred until the painter is given its first window target
via set_window()
. (Ensuring that a device that’s compatible with the
native window is chosen)
Before calling paint_and_update_textures()
a
wgpu::Surface
must be initialized (and corresponding render state) by calling
set_window()
once you have
a [winit::window::Window
] with a valid .raw_window_handle()
associated.
pub fn render_state(&self) -> Option<RenderState>
pub fn render_state(&self) -> Option<RenderState>
Get the RenderState
.
Will return None
if the render state has not been initialized yet.
pub async fn set_window(
&mut self,
viewport_id: ViewportId,
window: Option<Arc<Window>>
) -> Result<(), WgpuError>
pub async fn set_window( &mut self, viewport_id: ViewportId, window: Option<Arc<Window>> ) -> Result<(), WgpuError>
Updates (or clears) the [winit::window::Window
] associated with the Painter
This creates a wgpu::Surface
for the given Window (as well as initializing render
state if needed) that is used for egui rendering.
This must be called before trying to render via
paint_and_update_textures
§Portability
In particular it’s important to note that on Android a it’s only possible to create
a window surface between Resumed
and Paused
lifecycle events, and Winit will panic on
attempts to query the raw window handle while paused.
On Android set_window
should be called with Some(window)
for each
Resumed
event and None
for each Paused
event. Currently, on all other platforms
set_window
may be called with Some(window)
as soon as you have a
valid [winit::window::Window
].
§Errors
If the provided wgpu configuration does not match an available device.
pub async unsafe fn set_window_unsafe(
&mut self,
viewport_id: ViewportId,
window: Option<&Window>
) -> Result<(), WgpuError>
pub async unsafe fn set_window_unsafe( &mut self, viewport_id: ViewportId, window: Option<&Window> ) -> Result<(), WgpuError>
Updates (or clears) the [winit::window::Window
] associated with the Painter
without taking ownership of the window.
Like set_window
except:
§Safety
The user is responsible for ensuring that the window is alive for as long as it is set.
pub fn max_texture_side(&self) -> Option<usize>
pub fn max_texture_side(&self) -> Option<usize>
Returns the maximum texture dimension supported if known
This API will only return a known dimension after set_window()
has been called
at least once, since the underlying device and render state are initialized lazily
once we have a window (that may determine the choice of adapter/device).
pub fn on_window_resized( &mut self, viewport_id: ViewportId, width_in_pixels: NonZero<u32>, height_in_pixels: NonZero<u32> )
pub fn paint_and_update_textures(
&mut self,
viewport_id: ViewportId,
pixels_per_point: f32,
clear_color: [f32; 4],
clipped_primitives: &[ClippedPrimitive],
textures_delta: &TexturesDelta,
capture: bool
) -> (f32, Option<ColorImage>)
pub fn paint_and_update_textures( &mut self, viewport_id: ViewportId, pixels_per_point: f32, clear_color: [f32; 4], clipped_primitives: &[ClippedPrimitive], textures_delta: &TexturesDelta, capture: bool ) -> (f32, Option<ColorImage>)
Returns two things:
The approximate number of seconds spent on vsync-waiting (if any), and the captures captured screenshot if it was requested.
pub fn gc_viewports( &mut self, active_viewports: &HashSet<ViewportId, BuildHasherDefault<NoHashHasher<ViewportId>>> )
pub fn destroy(&mut self)
Auto Trait Implementations§
impl !Freeze for Painter
impl !RefUnwindSafe for Painter
impl Send for Painter
impl Sync for Painter
impl Unpin for Painter
impl !UnwindSafe for Painter
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request