diff --git a/Cargo.toml b/Cargo.toml index 93c25a2d..c81a97dd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,3 @@ git = "https://github.com/tomaka/android-rs-glue" [dev-dependencies.gl_generator] git = "https://github.com/bjz/gl-rs" - -[dev-dependencies.gl] -git = "https://github.com/bjz/gl-rs" diff --git a/examples/fullscreen.rs b/examples/fullscreen.rs index f0aab47b..1df51248 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::>()); diff --git a/examples/multiwindow.rs b/examples/multiwindow.rs index df52ab2d..84af0616 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::>(); diff --git a/examples/support/mod.rs b/examples/support/mod.rs new file mode 100644 index 00000000..4495f177 --- /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 5621b3c6..66ca7cad 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::>());