1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
use super::*;

error_chain! {
    errors {
        InvalidEnum
        InvalidValue
        InvalidOperation
        StackOverflow
        StackUnderflow
        OutOfMemory
        InvalidFramebufferOperation
        ContextLost
        UnknownError
    }
}

pub fn get_error<T>(t: T) -> Result<T> {
    if cfg!(debug_assertions) {
        unsafe {
            let error_code: u32 = gl::GetError();

            use self::ErrorKind::*;
            match error_code {
                gl::INVALID_ENUM => Err(InvalidEnum.into()),
                gl::INVALID_VALUE => Err(InvalidValue.into()),
                gl::INVALID_OPERATION => Err(InvalidOperation.into()),
                gl::STACK_OVERFLOW => Err(StackOverflow.into()),
                gl::STACK_UNDERFLOW => Err(StackUnderflow.into()),
                gl::OUT_OF_MEMORY => Err(OutOfMemory.into()),
                gl::INVALID_FRAMEBUFFER_OPERATION => Err(InvalidFramebufferOperation.into()),
                gl::CONTEXT_LOST => Err(ContextLost.into()),
                gl::NO_ERROR => Ok(t),
                _ => Err(UnknownError.into()),
            }
        }
    } else {
        Ok(t)
    }
}

pub fn get_error_always()  -> Result<()> {
    unsafe {
        let error_code: u32 = gl::GetError();

        use self::ErrorKind::*;
        match error_code {
            gl::INVALID_ENUM => Err(InvalidEnum.into()),
            gl::INVALID_VALUE => Err(InvalidValue.into()),
            gl::INVALID_OPERATION => Err(InvalidOperation.into()),
            gl::STACK_OVERFLOW => Err(StackOverflow.into()),
            gl::STACK_UNDERFLOW => Err(StackUnderflow.into()),
            gl::OUT_OF_MEMORY => Err(OutOfMemory.into()),
            gl::INVALID_FRAMEBUFFER_OPERATION => Err(InvalidFramebufferOperation.into()),
            gl::CONTEXT_LOST => Err(ContextLost.into()),
            gl::NO_ERROR => Ok(()),
            _ => Err(UnknownError.into()),
        }
    }
}