diff --git a/src/sdl2/image/mod.rs b/src/sdl2/image/mod.rs index 552e40d1..bec832e8 100644 --- a/src/sdl2/image/mod.rs +++ b/src/sdl2/image/mod.rs @@ -135,6 +135,7 @@ impl<'a> SaveSurface for Surface<'a> { /// Method extensions for creating Textures from a `TextureCreator` pub trait LoadTexture { fn load_texture>(&self, filename: P) -> Result; + fn load_texture_rw(&self, buf: &[u8]) -> Result; } impl LoadTexture for TextureCreator { @@ -150,6 +151,18 @@ impl LoadTexture for TextureCreator { } } } + + fn load_texture_rw(&self, buf: &[u8]) -> Result { + unsafe { + let buf = sdl2_sys::SDL_RWFromMem(buf.as_ptr() as *mut libc::c_void, buf.len() as i32); + let raw = image::IMG_LoadTexture_RW(self.raw(), buf, 1); // close(free) buff after load + if (raw as *mut ()).is_null() { + Err(get_error()) + } else { + Ok(self.raw_create_texture(raw)) + } + } + } } /// Context manager for `sdl2_image` to manage quitting. Can't do much with it but