diff --git a/src/sdl2/render.rs b/src/sdl2/render.rs index e419abd9..266708b7 100644 --- a/src/sdl2/render.rs +++ b/src/sdl2/render.rs @@ -232,6 +232,10 @@ impl RendererContext { Err(SdlError(get_error())) } } + + unsafe fn get_raw_target(&self) -> *mut ll::SDL_Texture { + ll::SDL_GetRenderTarget(self.raw) + } } impl Deref for Canvas { @@ -484,10 +488,11 @@ impl Canvas { pub fn with_texture_canvas(&mut self, texture: &mut Texture, f: F) -> Result<(), TargetRenderError> where for<'r> F: FnOnce(&'r mut Canvas,) { if self.render_target_supported() { + let target = unsafe { self.get_raw_target() }; unsafe { self.set_raw_target(texture.raw) } .map_err(|e| TargetRenderError::SdlError(e))?; f(self); - unsafe { self.set_raw_target(ptr::null_mut()) } + unsafe { self.set_raw_target(target) } .map_err(|e| TargetRenderError::SdlError(e))?; Ok(()) } else { @@ -555,13 +560,14 @@ impl Canvas { -> Result<(), TargetRenderError> where for<'r> F: FnMut(&'r mut Canvas, &U), I: Iterator, U)> { if self.render_target_supported() { + let target = unsafe { self.get_raw_target() }; for &(ref texture, ref user_context) in textures { unsafe { self.set_raw_target(texture.raw) } .map_err(|e| TargetRenderError::SdlError(e))?; f(self, &user_context); } // reset the target to its source - unsafe { self.set_raw_target(ptr::null_mut()) } + unsafe { self.set_raw_target(target) } .map_err(|e| TargetRenderError::SdlError(e))?; Ok(()) } else {