summaryrefslogtreecommitdiff
path: root/src/gl_renderer.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/gl_renderer.rs')
-rw-r--r--src/gl_renderer.rs46
1 files changed, 44 insertions, 2 deletions
diff --git a/src/gl_renderer.rs b/src/gl_renderer.rs
index 64f9151..9f71074 100644
--- a/src/gl_renderer.rs
+++ b/src/gl_renderer.rs
@@ -19,16 +19,58 @@ extern crate simple_error;
use std::error::Error;
+use self::glium::glutin;
+
use bitmap::BitmapManager;
+use input::Event;
/// Renderer using the OpenGL library.
-pub struct GLRenderer;
+pub struct GLRenderer {
+ events_loop: glutin::EventsLoop,
+ display: glium::Display,
+}
impl GLRenderer {
/// Instantiate a new instance of the renderer.
pub fn new(bitmaps: &BitmapManager) -> Result<GLRenderer, Box<Error>> {
let _font = bitmaps.get_font("textfont").unwrap();
- Ok(GLRenderer { })
+ let events_loop = glutin::EventsLoop::new();
+ let window = glutin::WindowBuilder::new();
+ let context = glutin::ContextBuilder::new();
+ let display = glium::Display::new(window, context, &events_loop)?;
+
+ Ok(GLRenderer { events_loop, display })
+ }
+
+ // TODO: Document this.
+ fn convert_event(ev: glutin::DeviceEvent) -> Event {
+ match ev {
+ // glutin::DeviceEvent::Button { button, state } => {
+ // if state == glutin::ElementState::Pressed {
+ // Event::KeyDown(button as u8)
+ // } else {
+ // Event::KeyUp(button as u8)
+ // }
+ // },
+ glutin::DeviceEvent::Key(press) => {
+ Event::KeyDown(press.scancode as u8)
+ }
+ _ => Event::None,
+ }
+ }
+
+ // TODO: Document this.
+ pub fn handle_input<F>(&mut self, mut on_event: F)
+ where F: FnMut(Event) {
+ self.events_loop.poll_events(|ev| {
+ match ev {
+ glutin::Event::DeviceEvent { device_id: _, event } => {
+ let equivalent = GLRenderer::convert_event(event);
+ on_event(equivalent);
+ },
+ _ => (),
+ }
+ });
}
}