use { crate::render::{ egl::image::EglImage, gl::{render_buffer::GlRenderBuffer, texture::GlTexture}, Framebuffer, RenderContext, RenderError, Texture, }, std::rc::Rc, }; pub struct Image { pub(super) ctx: Rc, pub(super) gl: Rc, } impl Image { pub fn width(&self) -> i32 { self.gl.width } pub fn height(&self) -> i32 { self.gl.height } pub fn to_texture(self: &Rc) -> Result, RenderError> { Ok(Rc::new(Texture { ctx: self.ctx.clone(), gl: GlTexture::import_img(&self.ctx.ctx, &self.gl)?, })) } pub fn to_framebuffer(&self) -> Result, RenderError> { self.ctx.ctx.with_current(|| unsafe { let rb = GlRenderBuffer::from_image(&self.gl, &self.ctx.ctx)?; let fb = rb.create_framebuffer()?; Ok(Rc::new(Framebuffer { ctx: self.ctx.clone(), gl: fb, })) }) } }