From 4257b7b8400a09a5e5de2bb16a4621776a62328a Mon Sep 17 00:00:00 2001 From: Lars Bergstrom Date: Wed, 14 May 2014 10:24:30 -0500 Subject: [PATCH] Android Rust Upgrade fixes --- glut.rs | 107 +++++++++++++++++++++++--------------------------------- test.rs | 20 +++++------ 2 files changed, 54 insertions(+), 73 deletions(-) diff --git a/glut.rs b/glut.rs index 7cf93d9..1bfea16 100644 --- a/glut.rs +++ b/glut.rs @@ -11,7 +11,6 @@ use libc::{c_int, c_uint, c_uchar, c_char}; use std::cast; -use std::local_data; use std::ptr::null; /* FIXME: global variable glutStrokeRoman */ @@ -73,15 +72,15 @@ pub trait ReshapeCallback { fn call(&self, x: c_int, y: c_int); } pub trait IdleCallback { fn call(&self); } pub trait MouseWheelCallback { fn call(&self, wheel: c_int, direction: c_int, x: c_int, y: c_int); } -local_data_key!(display_tls_key: ~DisplayCallback:'static) -local_data_key!(keyboard_tls_key: ~KeyboardCallback:'static) -local_data_key!(mouse_tls_key: ~MouseCallback:'static) -local_data_key!(motion_tls_key: ~MotionCallback:'static) -local_data_key!(passive_motion_tls_key: ~PassiveMotionCallback:'static) -local_data_key!(timer_tls_key: ~TimerCallback:'static) -local_data_key!(reshape_tls_key: ~ReshapeCallback:'static) -local_data_key!(idle_tls_key: ~IdleCallback:'static) -local_data_key!(mouse_wheel_tls_key: ~MouseWheelCallback:'static) +local_data_key!(display_tls_key: Box) +local_data_key!(keyboard_tls_key: Box) +local_data_key!(mouse_tls_key: Box) +local_data_key!(motion_tls_key: Box) +local_data_key!(passive_motion_tls_key: Box) +local_data_key!(timer_tls_key: Box) +local_data_key!(reshape_tls_key: Box) +local_data_key!(idle_tls_key: Box) +local_data_key!(mouse_wheel_tls_key: Box) pub enum State { WindowWidth, @@ -91,7 +90,7 @@ pub enum State { pub fn init() { unsafe { let argc = 0 as c_int; - let glut = ~"glut"; + let glut = "glut"; glut.to_c_str().with_ref(|command| { let argv: (*u8, *u8) = (command as *u8, null()); let argv_p = cast::transmute(&argv); @@ -142,120 +141,104 @@ pub fn reshape_window(window: Window, width: c_int, height: c_int) { } pub extern "C" fn display_callback() { - local_data::get(display_tls_key, |callback| { - callback.as_ref().map(|&ref cb| { - cb.call(); - }); + display_tls_key.get().as_ref().map(|&ref cb| { + cb.call(); }); } -pub fn display_func(callback: ~DisplayCallback:'static) { - local_data::set(display_tls_key, callback); +pub fn display_func(callback: Box) { + display_tls_key.replace(Some(callback)); unsafe { glutDisplayFunc(display_callback); } } pub extern "C" fn keyboard_callback(key: c_uchar, x: c_int, y: c_int) { - local_data::get(keyboard_tls_key, |callback| { - callback.as_ref().map(|&ref cb| { - cb.call(key, x, y); - }); + keyboard_tls_key.get().as_ref().map(|&ref cb| { + cb.call(key, x, y); }); } -pub fn keyboard_func(callback: ~KeyboardCallback:'static) { - local_data::set(keyboard_tls_key, callback); +pub fn keyboard_func(callback: Box) { + keyboard_tls_key.replace(Some(callback)); unsafe { glutKeyboardFunc(keyboard_callback); } } pub extern "C" fn mouse_callback(button: c_int, state: c_int, x: c_int, y: c_int) { - local_data::get(mouse_tls_key, |callback| { - callback.as_ref().map(|&ref cb| { - cb.call(button, state, x, y); - }); + mouse_tls_key.get().as_ref().map(|&ref cb| { + cb.call(button, state, x, y); }); } -pub fn mouse_func(callback: ~MouseCallback:'static) { - local_data::set(mouse_tls_key, callback); +pub fn mouse_func(callback: Box) { + mouse_tls_key.replace(Some(callback)); unsafe { glutMouseFunc(mouse_callback); } } pub extern "C" fn motion_callback(x: c_int, y: c_int) { - local_data::get(motion_tls_key, |callback| { - callback.as_ref().map(|&ref cb| { - cb.call(x, y); - }); + motion_tls_key.get().as_ref().map(|&ref cb| { + cb.call(x, y); }); } -pub fn motion_func(callback: ~MotionCallback:'static) { - local_data::set(motion_tls_key, callback); +pub fn motion_func(callback: Box) { + motion_tls_key.replace(Some(callback)); unsafe { glutMotionFunc(motion_callback); } } pub extern "C" fn passive_motion_callback(x: c_int, y: c_int) { - local_data::get(passive_motion_tls_key, |callback| { - callback.as_ref().map(|&ref cb| { + passive_motion_tls_key.get().as_ref().map(|&ref cb| { cb.call(x, y); }); - }); } -pub fn passive_motion_func(callback: ~PassiveMotionCallback:'static) { - local_data::set(passive_motion_tls_key, callback); +pub fn passive_motion_func(callback: Box) { + passive_motion_tls_key.replace(Some(callback)); unsafe { glutPassiveMotionFunc(passive_motion_callback); } } pub extern "C" fn timer_callback(_index: int) { - local_data::get(timer_tls_key, |callback| { - callback.as_ref().map(|&ref cb| { + timer_tls_key.get().as_ref().map(|&ref cb| { cb.call(); }); - }); } -pub fn timer_func(msecs: u32, callback: ~TimerCallback:'static) { - local_data::set(timer_tls_key, callback); +pub fn timer_func(msecs: u32, callback: Box) { + timer_tls_key.replace(Some(callback)); unsafe { glutTimerFunc(msecs, timer_callback, 0); } } pub extern "C" fn reshape_callback(width: c_int, height: c_int) { - local_data::get(reshape_tls_key, |callback| { - callback.as_ref().map(|&ref cb| { + reshape_tls_key.get().as_ref().map(|&ref cb| { cb.call(width, height); }); - }); } -pub fn reshape_func(_window: Window, callback: ~ReshapeCallback:'static) { - local_data::set(reshape_tls_key, callback); +pub fn reshape_func(_window: Window, callback: Box) { + reshape_tls_key.replace(Some(callback)); unsafe { glutReshapeFunc(reshape_callback); } } pub extern "C" fn idle_callback() { - local_data::get(idle_tls_key, |callback| { - callback.as_ref().map(|&ref cb| { + idle_tls_key.get().as_ref().map(|&ref cb| { cb.call(); }); - }); } -pub fn idle_func(callback: ~IdleCallback:'static) { - local_data::set(idle_tls_key, callback); +pub fn idle_func(callback: Box) { + idle_tls_key.replace(Some(callback)); unsafe { glutIdleFunc(idle_callback); } @@ -267,25 +250,23 @@ pub fn idle_func(callback: ~IdleCallback:'static) { #[cfg(target_os="linux")] #[cfg(target_os="android")] pub extern "C" fn mouse_wheel_callback(wheel: c_int, direction: c_int, x: c_int, y: c_int) { - local_data::get(mouse_wheel_tls_key, |callback| { - callback.as_ref().map(|&ref cb| { - cb.call(wheel, direction, x, y); - }); + mouse_wheel_tls_key.get().as_ref().map(|&ref cb| { + cb.call(wheel, direction, x, y); }); } #[cfg(target_os="linux")] #[cfg(target_os="android")] -pub fn mouse_wheel_func(callback: ~MouseWheelCallback:'static) { - local_data::set(mouse_wheel_tls_key, callback); +pub fn mouse_wheel_func(callback: Box) { + mouse_wheel_tls_key.replace(Some(callback)); unsafe { glutMouseWheelFunc(mouse_wheel_callback); } } #[cfg(target_os="macos")] -pub fn mouse_wheel_func(callback: ~MouseWheelCallback:'static) { - local_data::set(mouse_wheel_tls_key, callback); +pub fn mouse_wheel_func(callback: Box) { + mouse_wheel_tls_key.replace(Some(callback)); } #[cfg(target_os="macos")] diff --git a/test.rs b/test.rs index 4f0cca4..6196de6 100644 --- a/test.rs +++ b/test.rs @@ -27,7 +27,7 @@ use std::io::println; use std::task; fn fragment_shader_source() -> ~str { - ~" + " #ifdef GLES2 precision mediump float; #endif @@ -35,11 +35,11 @@ fn fragment_shader_source() -> ~str { void main(void) { gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); } - " + ".to_owned() } fn vertex_shader_source() -> ~str { - ~" + " attribute vec3 aVertexPosition; /*uniform mat4 uMVMatrix; @@ -49,7 +49,7 @@ fn vertex_shader_source() -> ~str { gl_Position = /*uPMatrix * uMVMatrix **/ vec4(aVertexPosition, 1.0); } - " + ".to_owned() } fn load_shader(source_str: ~str, shader_type: GLenum) -> GLuint { @@ -59,12 +59,12 @@ fn load_shader(source_str: ~str, shader_type: GLenum) -> GLuint { if get_error() != NO_ERROR { println(format!("error: {:d}", get_error() as int)); - fail!(~"failed to compile shader with error"); + fail!("failed to compile shader with error"); } if get_shader_iv(shader_id, COMPILE_STATUS) == (0 as GLint) { println(get_shader_info_log(shader_id)); - fail!(~"failed to compile shader"); + fail!("failed to compile shader"); } return shader_id; } @@ -79,7 +79,7 @@ struct ShaderProgram { fn ShaderProgram(program: GLuint) -> ShaderProgram { let p = ShaderProgram { program : program, - aVertexPosition : get_attrib_location(program, ~"aVertexPosition"), + aVertexPosition : get_attrib_location(program, "aVertexPosition"), /*self.uPMatrix : get_uniform_location(program, "uPMatrix"), self.uMVMatrix : get_uniform_location(program, "uMVMatrix")*/ }; @@ -98,7 +98,7 @@ fn init_shaders() -> ShaderProgram { link_program(program); if get_program_iv(program, LINK_STATUS) == (0 as GLint) { - fail!(~"failed to initialize program"); + fail!("failed to initialize program"); } use_program(program); @@ -109,11 +109,11 @@ fn init_shaders() -> ShaderProgram { fn init_buffers() -> GLuint { let triangle_vertex_buffer = gen_buffers(1 as GLsizei)[0]; bind_buffer(ARRAY_BUFFER, triangle_vertex_buffer); - let vertices = ~[ + let vertices = vec!( 0.0f32, 1.0f32, 0.0f32, 1.0f32, 0.0f32, 0.0f32, 0.0f32, 0.0f32, 0.0f32 - ]; + ); buffer_data(ARRAY_BUFFER, vertices, STATIC_DRAW); return triangle_vertex_buffer; }