//! OpenGL bindings. #![deny(clippy::all, clippy::pedantic, missing_docs)] use opengl_registry_macros::for_each_opengl_command; for_each_opengl_command! { #[doc = stringify!(_gl_command_)] #[allow(non_snake_case, clippy::too_many_arguments)] pub unsafe fn _gl_command_(_gl_command_args_) -> _gl_command_ret_type_ { type GLFunc = unsafe extern "C" fn(_gl_command_arg_types_) -> _gl_command_ret_type_; let gl_func = std::mem::transmute::<_, GLFunc>(functions::_gl_command_); gl_func(_gl_command_arg_names_) } } mod ffi { #![allow( non_upper_case_globals, non_camel_case_types, non_snake_case, unused, missing_docs, clippy::unreadable_literal )] include!(concat!(env!("OUT_DIR"), "/bindings.rs")); } pub use ffi::*; /// Loads OpenGL function pointers using the given function address retriever function. pub fn load_with(get_proc_addr: GetProcAddrFn) where GetProcAddrFn: Fn(&str) -> unsafe extern "C" fn(), { for_each_opengl_command! { unsafe { functions::_gl_command_ = get_proc_addr(stringify!(_gl_command_)); } }; } mod functions { use opengl_registry_macros::for_each_opengl_command; for_each_opengl_command!( #[doc = stringify!(_gl_command_)] #[allow(non_upper_case_globals)] pub static mut _gl_command_: unsafe extern "C" fn() = function_not_loaded; ); extern "C" fn function_not_loaded() { panic!("OpenGL function not loaded"); } }