harenae-rs/src/main.rs

88 lines
2.8 KiB
Rust

mod gfx;
use winit::{
dpi::PhysicalSize,
event::*,
event_loop::{ControlFlow, EventLoop},
window::WindowBuilder,
};
pub async fn run() {
let event_loop = EventLoop::new();
let window = WindowBuilder::new()
.with_title("Haranae")
.with_inner_size(PhysicalSize::new(1280, 720))
.build(&event_loop)
.unwrap();
let mut render_ctx = gfx::Context::new(window, wgpu::Limits::default()).await;
event_loop.run(move |event, _, control_flow| match event {
Event::WindowEvent {
ref event,
window_id,
} if window_id == render_ctx.window.id() => match event {
WindowEvent::CloseRequested
| WindowEvent::KeyboardInput {
input:
KeyboardInput {
state: ElementState::Pressed,
virtual_keycode: Some(VirtualKeyCode::Escape),
..
},
..
} => *control_flow = ControlFlow::Exit,
WindowEvent::Resized(physical_size) => {
render_ctx.resize(*physical_size);
}
WindowEvent::ScaleFactorChanged { new_inner_size, .. } => {
render_ctx.resize(**new_inner_size);
}
_ => {}
},
Event::RedrawRequested(window_id) if window_id == render_ctx.window.id() => {
let output = match render_ctx.surface.get_current_texture() {
Ok(it) => it,
Err(err) => return log::error!("{err}"),
};
let view = output
.texture
.create_view(&wgpu::TextureViewDescriptor::default());
let mut encoder =
render_ctx
.device
.create_command_encoder(&wgpu::CommandEncoderDescriptor {
label: Some("Render encoder"),
});
let _render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
label: Some("Render Pass"),
color_attachments: &[Some(wgpu::RenderPassColorAttachment {
view: &view,
resolve_target: None,
ops: wgpu::Operations {
load: wgpu::LoadOp::Clear(wgpu::Color::BLACK),
store: true,
},
})],
depth_stencil_attachment: None,
});
drop(_render_pass);
render_ctx.queue.submit(std::iter::once(encoder.finish()));
output.present();
}
Event::MainEventsCleared => {
render_ctx.window.request_redraw();
}
_ => {}
});
}
fn main() {
env_logger::init();
pollster::block_on(run());
}