enginerenderer 0.0.1

A zero-dependency offline rendering engine in pure Rust — CPU path tracing, BVH acceleration, 16-band spectral rendering, PBR materials, animation & video export.
Documentation
pub fn alloc_dma_framebuffer(width: usize, height: usize) -> Option<DmaFramebuffer> {
    let pixel_bytes = width.checked_mul(height)?.checked_mul(3)?.checked_mul(8)?;
    let buf = vec![0_u8; pixel_bytes];
    Some(DmaFramebuffer {
        width,
        height,
        buffer: buf,
    })
}

pub struct DmaFramebuffer {
    pub width: usize,
    pub height: usize,
    buffer: Vec<u8>,
}

unsafe impl Send for DmaFramebuffer {}
unsafe impl Sync for DmaFramebuffer {}

impl std::fmt::Debug for DmaFramebuffer {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        f.debug_struct("DmaFramebuffer")
            .field("width", &self.width)
            .field("height", &self.height)
            .field("byte_len", &self.buffer.len())
            .finish()
    }
}

impl DmaFramebuffer {
    pub fn as_ptr(&self) -> *mut u8 {
        self.buffer.as_ptr() as *mut u8
    }

    pub fn byte_len(&self) -> usize {
        self.buffer.len()
    }

    pub fn virt_addr(&self) -> usize {
        self.buffer.as_ptr() as usize
    }
}