use pixels::{Pixels, SurfaceTexture};
use pixels_u32::PixelsExt;
use winit::{
dpi::PhysicalSize,
event::{ElementState, Event, KeyboardInput, VirtualKeyCode, WindowEvent},
event_loop::{ControlFlow, EventLoop},
window::WindowBuilder,
};
fn main() -> anyhow::Result<()> {
let event_loop = EventLoop::new();
let window = WindowBuilder::new()
.with_title("Pixels-u32 demo")
.with_inner_size(PhysicalSize {
width: 800,
height: 600,
})
.build(&event_loop)?;
let mut pixels = {
let size = window.inner_size();
let surface = SurfaceTexture::new(size.width, size.height, &window);
Pixels::new(size.width, size.height, surface)?
};
event_loop.run(move |event, _, control_flow| {
*control_flow = ControlFlow::Poll;
match event {
Event::WindowEvent { event, window_id } if window_id == window.id() => match event {
WindowEvent::CloseRequested
| WindowEvent::KeyboardInput {
input:
KeyboardInput {
state: ElementState::Pressed,
virtual_keycode: Some(VirtualKeyCode::Escape),
..
},
..
} => *control_flow = ControlFlow::Exit,
WindowEvent::Resized(size) => {
resize(&mut pixels, size.width, size.height);
}
WindowEvent::ScaleFactorChanged { new_inner_size, .. } => {
resize(&mut pixels, new_inner_size.width, new_inner_size.height);
}
_ => {}
},
Event::MainEventsCleared => {}
Event::RedrawRequested(_) => {
draw(&mut pixels);
}
_ => {}
}
});
}
fn resize(pixels: &mut Pixels, width: u32, height: u32) {
pixels.resize_surface(width, height);
pixels.resize_buffer(width, height);
}
fn draw(pixels: &mut Pixels) {
let frame = pixels.get_frame_u32();
frame.iter_mut().for_each(|pixel| {
*pixel = 0xff302010;
});
pixels.render().unwrap();
}