use sdl2::{image::LoadSurface, surface::Surface};
use crate::{arena::TempArena, assets::Bitmap, renderer::OpenGLRenderer};
pub struct Platform<'p> {
renderer: &'p mut OpenGLRenderer,
pub temp_arena: &'p mut TempArena,
}
impl<'p> Platform<'p> {
pub fn new(renderer: &'p mut OpenGLRenderer, temp_arena: &'p mut TempArena) -> Self {
Self {
renderer,
temp_arena,
}
}
pub fn load_image(&mut self, path: &str) -> Result<Bitmap, String> {
let target_format = sdl2::pixels::PixelFormatEnum::RGBA8888;
let spritesheet = Surface::from_file(path)?.convert_format(target_format)?;
Ok(spritesheet.with_lock(|bytes| unsafe {
let ptr = bytes.as_ptr().cast::<u32>();
let size = bytes.len() / 4;
let slice = std::slice::from_raw_parts(ptr, size);
let (width, height) = (spritesheet.width(), spritesheet.height());
let texture_id = self.renderer.load_texture(slice, width, height);
Bitmap::new(texture_id, width as f32, height as f32)
}))
}
}