diff --git a/src/sdl2/render.rs b/src/sdl2/render.rs index 988e9aa0..d138587a 100644 --- a/src/sdl2/render.rs +++ b/src/sdl2/render.rs @@ -702,14 +702,13 @@ impl Texture { else { Err(get_error()) } } - pub fn lock(&self, rect: Option) -> SdlResult<(CVec, i32)> { + fn unsafe_lock(&self, rect: Option) -> SdlResult<(CVec, i32)> { let q = try!(self.query()); unsafe { let actual_rect = match rect { Some(ref rect) => rect as *const _, None => ptr::null() }; - let pixels : *const c_void = ptr::null(); let pitch = 0i32; let ret = ll::SDL_LockTexture(self.raw, actual_rect, &pixels, &pitch); @@ -722,6 +721,17 @@ impl Texture { } } + pub fn lock(&self, rect: Option, func: |CVec, i32| -> ()) -> SdlResult<()> { + match self.unsafe_lock(rect) { + Ok((cvec, pitch)) => { + func(cvec, pitch); + self.unlock(); + Ok(()) + } + Err(e) => Err(e), + } + } + pub fn unlock(&self) { unsafe { ll::SDL_UnlockTexture(self.raw) } }