three_d/window/winit_window/frame_io.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
use crate::control::Event;
use crate::core::{Context, RenderTarget, Viewport};
///
/// Input for rendering (and whatever else needs it) each frame.
/// It includes events that can be used as input to [controls](crate::renderer::control).
/// The data should only be used for one frame.
///
/// Note:
/// [FrameInput] is automatically generated if using the default [Window](crate::window::Window).
/// Use [FrameInputGenerator](crate::window::FrameInputGenerator) to generate it with a custom [winit](https://crates.io/crates/winit) window.
///
#[derive(Clone, Debug)]
pub struct FrameInput {
/// A list of [events](crate::Event) which has occurred since last frame.
pub events: Vec<Event>,
/// Milliseconds since last frame.
pub elapsed_time: f64,
/// Milliseconds accumulated time since start.
pub accumulated_time: f64,
/// Viewport of the window in physical pixels (the size of the screen [RenderTarget] which is returned from [FrameInput::screen]).
pub viewport: Viewport,
/// Width of the window in logical pixels.
pub window_width: u32,
/// Height of the window in logical pixels.
pub window_height: u32,
/// Number of physical pixels for each logical pixel.
pub device_pixel_ratio: f32,
/// Whether or not this is the first frame.
pub first_frame: bool,
/// The graphics context for the window.
pub context: Context,
}
impl FrameInput {
///
/// Returns the screen render target, which is used for drawing to the screen, for this window.
/// Same as
///
/// ```notrust
/// RenderTarget::screen(&frame_input.context, frame_input.viewport.width, frame_input.viewport.height)
/// ```
///
pub fn screen(&self) -> RenderTarget {
RenderTarget::screen(&self.context, self.viewport.width, self.viewport.height)
}
}
///
/// Output from the rendering to the default [Window](crate::window::Window) each frame.
///
#[derive(Clone, Debug)]
pub struct FrameOutput {
///
/// If this is true:
/// - On desktop, the window is closed and the renderloop is stopped.
/// - On web, the render loop is stopped, the event handlers are removed and the `Window` dropped. Note that the canvas is not removed.
///
pub exit: bool,
///
/// Swaps the back and front buffer if this is true.
/// Set this to true if something have been rendered this frame and you want to display it.
/// Set it to false if nothing have been rendered this frame, for example if nothing has changed,
/// and you want to reuse the image from an old frame.
/// Currently ignored on web, since it does not use double buffering.
///
pub swap_buffers: bool,
///
/// Whether to stop the render loop until next event.
///
pub wait_next_event: bool,
}
impl Default for FrameOutput {
fn default() -> Self {
Self {
exit: false,
swap_buffers: true,
wait_next_event: false,
}
}
}