qqx 0.0.4

qqx is a 3d library for rust based on OpenGL
Documentation
use crate::Window;

pub use glium::glutin::event_loop::ControlFlow;

macro_rules! callbacks {
    ($($big:ident ($($tts:tt)*) : $low:ident,)*) => {
        $(
            pub trait $big = $($tts)*;

            pub fn $low <F> (cb: F) where F: $big + 'static {
                callbacks().$low = Some(Box::new(cb))
            }
        )*

        pub(crate) struct Callbacks {
            $(pub $low: Option <Box <dyn $big>>,)*
        }

        static mut CALLBACKS: Callbacks = Callbacks {
            $($low: None,)*
        };

        pub(super) fn callbacks() -> &'static mut Callbacks { unsafe { &mut CALLBACKS } }
    }
}

callbacks! {
    OnFrame(FnMut() -> ControlFlow) : on_frame,
    OnClose(FnMut(Window))          : on_close,
}