use callback::{AsWrapper, IntoCallback, Wrapper};
use egli;
use opengles_graphics::gl;
use slog;
use slog_scope;
use wlc::{Callback, Output};
#[derive(Debug)]
pub struct GLInit<C: Callback + 'static> {
child: C,
logger: slog::Logger,
}
impl<C: Callback + 'static> AsWrapper for GLInit<C> {
fn child(&mut self) -> Option<&mut Callback> {
Some(&mut self.child)
}
}
impl<C: Callback + 'static> Callback for Wrapper<GLInit<C>> {
fn output_context_created(&mut self, output: &Output) {
gl::load_with(|s| egli::egl::get_proc_address(s) as *const _);
debug!(self.logger, "Loaded GL Function Pointers");
self.child.output_context_created(output)
}
}
impl<C: Callback + 'static> GLInit<C> {
pub unsafe fn new<I: IntoCallback<C>>(renderer: I) -> GLInit<C> {
GLInit {
child: renderer.into_callback(),
logger: slog_scope::logger().new(o!("handler" => "GLInit")),
}
}
}