diff options
Diffstat (limited to 'examples')
-rw-r--r-- | examples/fullscreen.rs | 22 | ||||
-rw-r--r-- | examples/multiwindow.rs | 16 | ||||
-rw-r--r-- | examples/support/mod.rs | 32 | ||||
-rw-r--r-- | examples/window.rs | 23 |
4 files changed, 47 insertions, 46 deletions
diff --git a/examples/fullscreen.rs b/examples/fullscreen.rs index f0aab47..1df5124 100644 --- a/examples/fullscreen.rs +++ b/examples/fullscreen.rs @@ -1,15 +1,16 @@ #![feature(phase)] +#![feature(tuple_indexing)] #[cfg(target_os = "android")] #[phase(plugin, link)] extern crate android_glue; -extern crate gl; extern crate gl_init; -extern crate libc; use std::io::stdio::stdin; +mod support; + #[cfg(target_os = "android")] android_start!(main) @@ -38,24 +39,11 @@ fn main() { unsafe { window.make_current() }; - gl::load_with(|symbol| window.get_proc_address(symbol)); - - let version = { - use std::c_str::CString; - unsafe { CString::new(gl::GetString(gl::VERSION) as *const i8, false) } - }; - - println!("OpenGL version {}", version.as_str().unwrap()); - { - let win_size = window.get_inner_size().unwrap(); - gl::Viewport(0, 0, win_size.val0() as libc::c_int, win_size.val1() as libc::c_int); - } - - gl::ClearColor(0.0, 1.0, 0.0, 1.0); + let context = support::load(&window); while !window.is_closed() { - gl::Clear(gl::COLOR_BUFFER_BIT); + context.draw_frame((0.0, 1.0, 0.0, 1.0)); window.swap_buffers(); println!("{}", window.wait_events().collect::<Vec<gl_init::Event>>()); diff --git a/examples/multiwindow.rs b/examples/multiwindow.rs index df52ab2..84af061 100644 --- a/examples/multiwindow.rs +++ b/examples/multiwindow.rs @@ -1,12 +1,13 @@ #![feature(phase)] +#![feature(tuple_indexing)] #[cfg(target_os = "android")] #[phase(plugin, link)] extern crate android_glue; -extern crate gl; extern crate gl_init; -extern crate libc; + +mod support; #[cfg(target_os = "android")] android_start!(main) @@ -32,17 +33,10 @@ fn main() { fn run(window: gl_init::Window, color: (f32, f32, f32, f32)) { unsafe { window.make_current() }; - gl::load_with(|symbol| window.get_proc_address(symbol)); - - { - let win_size = window.get_inner_size().unwrap(); - gl::Viewport(0, 0, win_size.val0() as libc::c_int, win_size.val1() as libc::c_int); - } - - gl::ClearColor(color.val0(), color.val1(), color.val2(), color.val3()); + let context = support::load(&window); while !window.is_closed() { - gl::Clear(gl::COLOR_BUFFER_BIT); + context.draw_frame(color); window.swap_buffers(); window.wait_events().collect::<Vec<gl_init::Event>>(); diff --git a/examples/support/mod.rs b/examples/support/mod.rs new file mode 100644 index 0000000..4495f17 --- /dev/null +++ b/examples/support/mod.rs @@ -0,0 +1,32 @@ +#[phase(plugin)] +extern crate gl_generator; + +use gl_init; + +mod gl { + generate_gl_bindings!("gl", "core", "4.5", "struct") +} + +pub struct Context { + gl: gl::Gl +} + +pub fn load(window: &gl_init::Window) -> Context { + let gl = gl::Gl::load_with(|symbol| window.get_proc_address(symbol)); + + let version = { + use std::c_str::CString; + unsafe { CString::new(gl.GetString(gl::VERSION) as *const i8, false) } + }; + + println!("OpenGL version {}", version.as_str().unwrap()); + + Context { gl: gl } +} + +impl Context { + pub fn draw_frame(&self, color: (f32, f32, f32, f32)) { + self.gl.ClearColor(color.0, color.1, color.2, color.3); + self.gl.Clear(gl::COLOR_BUFFER_BIT); + } +} diff --git a/examples/window.rs b/examples/window.rs index 5621b3c..66ca7ca 100644 --- a/examples/window.rs +++ b/examples/window.rs @@ -1,12 +1,13 @@ #![feature(phase)] +#![feature(tuple_indexing)] #[cfg(target_os = "android")] #[phase(plugin, link)] extern crate android_glue; -extern crate gl; extern crate gl_init; -extern crate libc; + +mod support; #[cfg(target_os = "android")] android_start!(main) @@ -16,24 +17,10 @@ fn main() { unsafe { window.make_current() }; - gl::load_with(|symbol| window.get_proc_address(symbol)); - - let version = { - use std::c_str::CString; - unsafe { CString::new(gl::GetString(gl::VERSION) as *const i8, false) } - }; - - println!("OpenGL version {}", version.as_str().unwrap()); - - { - let win_size = window.get_inner_size().unwrap(); - gl::Viewport(0, 0, win_size.val0() as libc::c_int, win_size.val1() as libc::c_int); - } - - gl::ClearColor(0.0, 1.0, 0.0, 1.0); + let context = support::load(&window); while !window.is_closed() { - gl::Clear(gl::COLOR_BUFFER_BIT); + context.draw_frame((0.0, 1.0, 0.0, 1.0)); window.swap_buffers(); println!("{}", window.wait_events().collect::<Vec<gl_init::Event>>()); |