use thiserror::Error;
#[derive(Error, Debug)]
pub enum Errors {
#[error("Failed to initialize GLFW: {0}")]
GlfwInitializationError(String),
#[error("Failed to create window: {0}")]
WindowCreationError(String),
#[error("Failed to load texture: {0}")]
TextureLoadError(String),
#[error("Failed to compile shader: {0}\nShader source: {1}")]
ShaderCompilationError(String, String),
#[error("Failed to link shader program: {0}")]
ShaderLinkError(String),
#[error("Failed to load file: {0}")]
FileLoadError(String),
#[error("OpenGL error (code: {1}): {0}")]
OpenGlError(String, u32),
}
impl From<std::io::Error> for Errors {
fn from(err: std::io::Error) -> Self {
Errors::FileLoadError(err.to_string())
}
}
pub fn check_opengl_error() -> Result<(), Errors> {
let error_code = unsafe { gl::GetError() };
if error_code != gl::NO_ERROR {
let error_message = match error_code {
gl::INVALID_ENUM => "Invalid enum".to_string(),
gl::INVALID_VALUE => "Invalid value".to_string(),
gl::INVALID_OPERATION => "Invalid operation".to_string(),
gl::OUT_OF_MEMORY => "Out of memory".to_string(),
_ => format!("Unknown OpenGL error (code: {})", error_code),
};
return Err(Errors::OpenGlError(error_message, error_code));
}
Ok(())
}