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 60 61 62 63 64 65 66 67 68 69 70 71 72
use std::fmt; use std::error; pub type GlResult<T> = Result<T, GlError>; #[derive(Debug)] #[allow(non_camel_case_types)] pub enum GlError { ProgramLinkage(Option<String>), ProgramCreation, ProgramValidation(Option<String>), ShaderCreation, ShaderCompilation(Option<String>), TextureCreation, BufferCreation, VaoCreation, GL_INVALID_ENUM, GL_INVALID_VALUE, GL_INVALID_OPERATION, GL_OUT_OF_MEMORY, GL_UNKNOWN_ERROR } impl fmt::Display for GlError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match *self { GlError::ShaderCompilation(ref log) => { write!(f, "RenderError: Shader creation failed. Log:\n{}", log.clone().unwrap_or("No log".to_string())) }, GlError::ProgramLinkage(ref log) => { write!(f, "RenderError: Program linkage failed. Log:\n{}", log.clone().unwrap_or("No log".to_string())) }, GlError::ProgramValidation(ref log) => { write!(f, "RenderError: Program validation failed. Log:\n{}", log.clone().unwrap_or("No log".to_string())) }, _ => write!(f, "RenderError: {}", self.as_str()) } } } impl error::Error for GlError { fn description(&self) -> &str { "A render error occured" } fn cause(&self) -> Option<&error::Error> { None } } impl GlError { fn as_str(&self) -> &str { match *self { GlError::ProgramLinkage(_) => "program linking failed", GlError::ProgramCreation => "program creation failed", GlError::ProgramValidation(_) => "program validation failed", GlError::ShaderCreation => "shader creation failed", GlError::ShaderCompilation(_) => "shader compilation failed", GlError::TextureCreation => "texture creation failed", GlError::BufferCreation => "buffer creation failed", GlError::VaoCreation => "VAO creation failed", GlError::GL_INVALID_ENUM => "GL_INVALID_ENUM", GlError::GL_INVALID_VALUE => "GL_INVALID_VALUE", GlError::GL_INVALID_OPERATION => "GL_INVALID_OPERATION", GlError::GL_OUT_OF_MEMORY => "GL_OUT_OF_MEMORY", GlError::GL_UNKNOWN_ERROR => "GL_UNKNOWN_ERROR" } } }