From b0e17ebab31b4a65cb98a58b0b475b538c31a153 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Fri, 9 May 2014 13:06:24 +0200 Subject: [PATCH 1/4] Stop heap-allocating a string for fail!(). --- layers.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/layers.rs b/layers.rs index 69cf947..2748127 100644 --- a/layers.rs +++ b/layers.rs @@ -177,7 +177,7 @@ impl ContainerLayer { assert!(container.deref() as *ContainerLayer == pseudo_self.deref() as *ContainerLayer); }, - _ => fail!(~"Invalid parent of child in layer tree"), + _ => fail!("Invalid parent of child in layer tree"), } match child_common.next_sibling { From b5dbeba2dd7e79e3eef1ca81e7be82b21eb1b0cc Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Fri, 9 May 2014 13:06:42 +0200 Subject: [PATCH 2/4] Stop using ~[u8] for convert_rgb32_to_rgb24. --- util.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/util.rs b/util.rs index 0b672a7..36a27e3 100644 --- a/util.rs +++ b/util.rs @@ -9,11 +9,9 @@ // Miscellaneous utilities. -use std::slice; - -pub fn convert_rgb32_to_rgb24(buffer: ~[u8]) -> ~[u8] { +pub fn convert_rgb32_to_rgb24(buffer: &[u8]) -> Vec { let mut i = 0; - slice::from_fn(buffer.len() * 3 / 4, |j| { + Vec::from_fn(buffer.len() * 3 / 4, |j| { match j % 3 { 0 => { buffer[i + 2] From 0ca57c2539247818d313ce9a577aae1124117f46 Mon Sep 17 00:00:00 2001 From: Lars Bergstrom Date: Mon, 12 May 2014 11:43:50 -0500 Subject: [PATCH 3/4] Rust upgrade 20140510 --- platform/macos/surface.rs | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/platform/macos/surface.rs b/platform/macos/surface.rs index cad74d9..246ad6b 100644 --- a/platform/macos/surface.rs +++ b/platform/macos/surface.rs @@ -25,8 +25,8 @@ use opengles::cgl::{CGLPixelFormatObj, CORE_BOOLEAN_ATTRIBUTES, CORE_INTEGER_ATT use opengles::cgl::{kCGLNoError}; use opengles::gl2::GLint; use collections::HashMap; -use std::local_data; use std::ptr; +use std::vec::Vec; use platform::surface::NativeSurfaceMethods; use texturegl::Texture; @@ -50,7 +50,7 @@ impl NativeGraphicsMetadata { pub fn from_descriptor(descriptor: &NativeGraphicsMetadataDescriptor) -> NativeGraphicsMetadata { unsafe { - let mut attributes = ~[]; + let mut attributes = Vec::new(); for (i, &set) in descriptor.boolean_attributes.iter().enumerate() { if set { attributes.push(CORE_BOOLEAN_ATTRIBUTES[i]); @@ -63,7 +63,7 @@ impl NativeGraphicsMetadata { attributes.push(0); let mut pixel_format = ptr::null(); let mut count = 0; - assert!(CGLChoosePixelFormat(&attributes[0], &mut pixel_format, &mut count) == + assert!(CGLChoosePixelFormat(attributes.as_ptr(), &mut pixel_format, &mut count) == kCGLNoError); assert!(pixel_format != ptr::null()); assert!(count > 0); @@ -79,16 +79,16 @@ impl NativeGraphicsMetadata { /// pixel format object. #[deriving(Clone, Decodable, Encodable)] pub struct NativeGraphicsMetadataDescriptor { - boolean_attributes: ~[bool], - integer_attributes: ~[GLint], + boolean_attributes: Vec, + integer_attributes: Vec, } impl NativeGraphicsMetadataDescriptor { pub fn from_metadata(metadata: NativeGraphicsMetadata) -> NativeGraphicsMetadataDescriptor { unsafe { let mut descriptor = NativeGraphicsMetadataDescriptor { - boolean_attributes: ~[], - integer_attributes: ~[], + boolean_attributes: Vec::new(), + integer_attributes: Vec::new(), }; for &attribute in CORE_BOOLEAN_ATTRIBUTES.iter() { let mut value = 0; @@ -150,14 +150,14 @@ impl NativeSurface { let id = io_surface.get_id(); let mut io_surface = Some(io_surface); - local_data::modify(io_surface_repository, |opt_repository| { - let mut repository = match opt_repository { - None => HashMap::new(), - Some(repository) => repository, - }; - repository.insert(id, io_surface.take().unwrap()); - Some(repository) - }); + + let opt_repository = io_surface_repository.replace(None); + let mut repository = match opt_repository { + None => HashMap::new(), + Some(repository) => repository, + }; + repository.insert(id, io_surface.take().unwrap()); + io_surface_repository.replace(Some(repository)); NativeSurface { io_surface_id: Some(id), @@ -219,9 +219,11 @@ impl NativeSurfaceMethods for NativeSurface { } fn destroy(&mut self, _: &NativePaintingGraphicsContext) { - local_data::get_mut(io_surface_repository, |opt_repository| { - opt_repository.unwrap().remove(&self.io_surface_id.unwrap()) - }); + // There is no mutable borrow of items in local data. + let opt_repository = io_surface_repository.replace(None); + let mut repo = opt_repository.unwrap(); + repo.remove(&self.io_surface_id.unwrap()); + io_surface_repository.replace(Some(repo)); self.io_surface_id = None; self.mark_wont_leak() } From 1ab5e83f166e06e58fe7fe76ecc98b7a441031ff Mon Sep 17 00:00:00 2001 From: Lars Bergstrom Date: Wed, 14 May 2014 10:23:16 -0500 Subject: [PATCH 4/4] Android Rust Upgrade fixes --- platform/android/surface.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/platform/android/surface.rs b/platform/android/surface.rs index 6c6b467..808a33b 100644 --- a/platform/android/surface.rs +++ b/platform/android/surface.rs @@ -20,7 +20,7 @@ use libc::c_void; use std::cast; use std::mem; use std::ptr; -use std::slice; +use std::vec::Vec; /// FIXME(Aydin Kim) :Currently, native surface is consist of 2 types of hybrid image buffer. EGLImageKHR is used to GPU rendering and vector is used to CPU rendering. EGL extension seems not provide simple way to accessing its bitmap directly. In the future, we need to find out the way to integrate them. @@ -81,11 +81,11 @@ impl NativeSurfaceMethods for NativeSurface { fn new(_native_context: &NativePaintingGraphicsContext, size: Size2D, _stride: i32) -> NativeSurface { unsafe { let len = size.width * size.height * 4; - let bitmap = slice::from_elem::(len as uint, 0); + let bitmap: Vec = Vec::from_elem(len as uint, 0 as u8); NativeSurface { image: None, - bitmap: cast::transmute(bitmap), + bitmap: cast::transmute(bitmap.as_ptr()), will_leak : true, } }