pub struct GameLoop<F: FnMut(&mut FrameState<'_>)> { /* private fields */ }Expand description
A low-level game loop that drives a closure once per frame.
Owns the event loop, one or more windows, the GPU, a camera, timing,
and gamepad state. The user provides a FnMut(&mut FrameState) closure
that is invoked every frame.
This is the lower-level alternative to Game + Runtime. Use it
when you want more control over the setup process or need multiple
windows.
§Example
ⓘ
use optic_loop::{GameLoop, WindowState};
let el = EventLoop::new().unwrap();
let ws = WindowState::new(&el, "App", (800, 600).into());
let gpu = GPU::new_headless()?;
let camera = Camera::new((800, 600).into(), CamProj::Persp);
let game = GameLoop::new(el, gpu, camera, vec![ws], |frame| {
frame.gpu.clear();
})?;
game.run();Implementations§
Source§impl<F: FnMut(&mut FrameState<'_>)> GameLoop<F>
impl<F: FnMut(&mut FrameState<'_>)> GameLoop<F>
Sourcepub fn new(
el: EventLoop<()>,
gpu: GPU,
camera: Camera,
windows: Vec<WindowState>,
frame_fn: F,
) -> OpticResult<Self>
pub fn new( el: EventLoop<()>, gpu: GPU, camera: Camera, windows: Vec<WindowState>, frame_fn: F, ) -> OpticResult<Self>
Constructs a new game loop.
Attaches each window’s raw handle to the GPU context and initialises
gamepad support via gilrs.
§Errors
Returns an error if window attachment to the GPU surface or gamepad initialisation fails.
Trait Implementations§
Source§impl<F: FnMut(&mut FrameState<'_>)> ApplicationHandler for GameLoop<F>
impl<F: FnMut(&mut FrameState<'_>)> ApplicationHandler for GameLoop<F>
Source§fn resumed(&mut self, _el: &ActiveEventLoop)
fn resumed(&mut self, _el: &ActiveEventLoop)
Emitted when the application has been resumed. Read more
Source§fn window_event(
&mut self,
_el: &ActiveEventLoop,
id: WindowId,
event: WindowEvent,
)
fn window_event( &mut self, _el: &ActiveEventLoop, id: WindowId, event: WindowEvent, )
Emitted when the OS sends an event to a winit window.
Source§fn about_to_wait(&mut self, _el: &ActiveEventLoop)
fn about_to_wait(&mut self, _el: &ActiveEventLoop)
Emitted when the event loop is about to block and wait for new events. Read more
Source§fn new_events(&mut self, event_loop: &ActiveEventLoop, cause: StartCause)
fn new_events(&mut self, event_loop: &ActiveEventLoop, cause: StartCause)
Emitted when new events arrive from the OS to be processed. Read more
Source§fn user_event(&mut self, event_loop: &ActiveEventLoop, event: T)
fn user_event(&mut self, event_loop: &ActiveEventLoop, event: T)
Emitted when an event is sent from
EventLoopProxy::send_event.Source§fn device_event(
&mut self,
event_loop: &ActiveEventLoop,
device_id: DeviceId,
event: DeviceEvent,
)
fn device_event( &mut self, event_loop: &ActiveEventLoop, device_id: DeviceId, event: DeviceEvent, )
Emitted when the OS sends an event to a device.
Source§fn suspended(&mut self, event_loop: &ActiveEventLoop)
fn suspended(&mut self, event_loop: &ActiveEventLoop)
Emitted when the application has been suspended. Read more
Source§fn exiting(&mut self, event_loop: &ActiveEventLoop)
fn exiting(&mut self, event_loop: &ActiveEventLoop)
Emitted when the event loop is being shut down. Read more
Source§fn memory_warning(&mut self, event_loop: &ActiveEventLoop)
fn memory_warning(&mut self, event_loop: &ActiveEventLoop)
Emitted when the application has received a memory warning. Read more
Auto Trait Implementations§
impl<F> !Freeze for GameLoop<F>
impl<F> !RefUnwindSafe for GameLoop<F>
impl<F> !Send for GameLoop<F>
impl<F> !Sync for GameLoop<F>
impl<F> !UnwindSafe for GameLoop<F>
impl<F> Unpin for GameLoop<F>where
F: Unpin,
impl<F> UnsafeUnpin for GameLoop<F>where
F: UnsafeUnpin,
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
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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>
Convert
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>
Convert
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)
Convert
&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)
Convert
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§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>
Converts
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>
Converts
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 more