pub struct Driver { /* private fields */ }
Expand description
Driver takes ownership of winit’s event loop and creates a window and graphics context when possible.
Implementations§
source§impl Driver
impl Driver
sourcepub fn new(builder: WindowBuilder, render_size: Option<(u32, u32)>) -> Self
pub fn new(builder: WindowBuilder, render_size: Option<(u32, u32)>) -> Self
Create a Driver
with the given window builder and render target size (if absent, will use the window’s inner size instead).
sourcepub fn run_event_loop<T: 'static, U: 'static>(
self,
init_cb: impl FnOnce(Arc<Window>, Renderer) -> U + 'static,
handler: impl FnMut(Event<T>, &EventLoopWindowTarget<T>, &mut U) + 'static
) -> Result<(), Box<dyn Error>>
pub fn run_event_loop<T: 'static, U: 'static>( self, init_cb: impl FnOnce(Arc<Window>, Renderer) -> U + 'static, handler: impl FnMut(Event<T>, &EventLoopWindowTarget<T>, &mut U) + 'static ) -> Result<(), Box<dyn Error>>
Kick off the event loop. Once the driver receives the
winit::event::Event::Resumed
event, it will initialize
Frenderer and call init_cb
with the window and renderer.
This callback may return an application state object or
userdata which will be passed as the final argument to
handler
, which will be called for every winit event /after/
init_cb
has been called. If you don’t want run_event_loop
to own your application-specific data, you could instead store
such data yourself in internally mutable types such as
std::cell::OnceCell
and evaluate init_cb
for its side
effects.
Example:
drv.run_event_loop::<(), _>(
move |window, mut frend| {
let mut camera = Camera2D {
screen_pos: [0.0, 0.0],
screen_size: [1024.0, 768.0],
};
init_data(&mut frend, &mut camera);
(window, camera, frend)
},
move |event, target, (window, camera, frend)| {
// handle the winit event here, and maybe do some rendering!
});
Auto Trait Implementations§
impl Freeze for Driver
impl !RefUnwindSafe for Driver
impl Send for Driver
impl Sync for Driver
impl Unpin for Driver
impl !UnwindSafe for Driver
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> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
source§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
.source§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
.source§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.source§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.