extern crate glfw;
use self::glfw::{Action, Context, Key};
extern crate gl11;
use std::sync::mpsc::Receiver;
const SCR_WIDTH: u32 = 1024;
const SCR_HEIGHT: u32 = 768;
pub fn main() {
let mut glfw = glfw::init(glfw::FAIL_ON_ERRORS).unwrap();
glfw.window_hint(glfw::WindowHint::ContextVersion(1, 1));
glfw.window_hint(glfw::WindowHint::OpenGlProfile(
glfw::OpenGlProfileHint::Any,
));
let (mut window, events) = glfw
.create_window(SCR_WIDTH, SCR_HEIGHT, "Game", glfw::WindowMode::Windowed)
.expect("Failed to create GLFW window");
window.make_current();
window.set_key_polling(true);
window.set_framebuffer_size_polling(true);
gl11::load_with(|symbol| window.get_proc_address(symbol) as *const _);
unsafe {
gl11::BlendFunc(gl11::SRC_ALPHA, gl11::ONE_MINUS_SRC_ALPHA);
gl11::ClearColor(0.0, 0.0, 0.0, 0.0);
}
while !window.should_close() {
unsafe {
gl11::Clear(gl11::COLOR_BUFFER_BIT);
gl11::Begin(gl11::TRIANGLES);
gl11::Color3f(1.0, 0.0, 0.0);
gl11::Vertex2f(-0.8, -0.8);
gl11::Color3f(0.0, 1.0, 0.0);
gl11::Vertex2f(0.8, -0.8);
gl11::Color3f(0.0, 0.0, 1.0);
gl11::Vertex2f(0.0, 0.9);
gl11::End();
}
process_events(&mut window, &events);
window.swap_buffers();
glfw.poll_events();
}
}
fn process_events(window: &mut glfw::Window, events: &Receiver<(f64, glfw::WindowEvent)>) {
for (_, event) in glfw::flush_messages(events) {
match event {
glfw::WindowEvent::FramebufferSize(width, height) => unsafe {
gl11::Viewport(0, 0, width, height)
},
glfw::WindowEvent::Key(Key::Escape, _, Action::Press, _) => {
window.set_should_close(true)
}
_ => {}
}
}
}