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.