use gl;
#[derive(Debug, Clone, PartialEq, Hash)]
pub enum GlError {
UnknownError(u32),
InvalidOperation,
InvalidEnum,
#[allow(dead_code)]
Error(u32, String)
}
#[cfg(debug_assertions)]
pub fn panic_on_gl_error(context: &str) {
let errors = check_for_gl_errors();
if errors.len() > 0 {
panic!("{}: Unexpected OpenGL errors: {:?}", context, errors);
}
}
#[cfg(not(debug_assertions))]
pub fn panic_on_gl_error(context: &str) {
let errors = check_for_gl_errors();
if errors.len() > 0 {
println!("{}: Unexpected OpenGL errors: {:?}", context, errors);
}
}
pub fn check_for_gl_errors() -> Vec<GlError> {
let mut result = vec![];
while let Some(error) = check_next_gl_error() {
result.push(error)
}
result
}
fn check_next_gl_error() -> Option<GlError> {
let error = unsafe { gl::GetError() };
match error {
gl::NO_ERROR => None,
gl::INVALID_OPERATION => Some(GlError::InvalidOperation),
gl::INVALID_ENUM => Some(GlError::InvalidEnum),
unknown => Some(GlError::UnknownError(unknown))
}
}