extern crate glfw;
use glfw::{Action, Context, Key, RenderContext, WindowEvent};
fn main() {
let mut glfw = glfw::init(glfw::FAIL_ON_ERRORS).unwrap();
let (mut window, events) = glfw
.create_window(300, 300, "Hello this is window", glfw::WindowMode::Windowed)
.expect("Failed to create GLFW window.");
window.set_all_polling(true);
let mut render_context = window.render_context();
let thread = std::thread::spawn(move || {
render_context.make_current();
while !render_context.should_close() {
for (_, event) in glfw::flush_messages(&events) {
handle_window_event(&mut render_context, event);
}
render_context.swap_buffers();
}
});
while !window.should_close() {
glfw.wait_events_unbuffered(|window_id, event| {
assert_eq!(window.window_id(), window_id);
if let (_, WindowEvent::Close) = event {
window.set_should_close(false);
};
Some(event)
});
}
thread.join().unwrap();
}
fn handle_window_event(render_context: &mut RenderContext, event: glfw::WindowEvent) {
match event {
glfw::WindowEvent::Close | glfw::WindowEvent::Key(Key::Escape, _, Action::Press, _) => {
render_context.set_should_close(true);
render_context.post_empty_event();
}
_ => {}
}
}