From 676103dfd5904b3c7391e102c7add75d09eb1932 Mon Sep 17 00:00:00 2001 From: netcan <1469709759@qq.com> Date: Sat, 27 Jun 2020 10:19:40 +0800 Subject: [PATCH] add load_texture_rw interface for load texture from buffer --- src/sdl2/image/mod.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) 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