add load_texture_rw interface for load texture from buffer

This commit is contained in:
netcan
2020-06-27 10:19:40 +08:00
parent 99afa37e67
commit 676103dfd5
+13
View File
@@ -135,6 +135,7 @@ impl<'a> SaveSurface for Surface<'a> {
/// Method extensions for creating Textures from a `TextureCreator`
pub trait LoadTexture {
fn load_texture<P: AsRef<Path>>(&self, filename: P) -> Result<Texture, String>;
fn load_texture_rw(&self, buf: &[u8]) -> Result<Texture, String>;
}
impl<T> LoadTexture for TextureCreator<T> {
@@ -150,6 +151,18 @@ impl<T> LoadTexture for TextureCreator<T> {
}
}
}
fn load_texture_rw(&self, buf: &[u8]) -> Result<Texture, String> {
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