use thiserror::Error;
#[derive(Debug, Error)]
pub enum RenderError {
#[error("GPU adapter not found: no compatible GPU adapter available for this surface")]
AdapterNotFound,
#[error("GPU device error: {0}")]
DeviceError(String),
#[error("GPU surface creation failed: {0}")]
SurfaceCreation(String),
#[error("Shader file read failed for '{path}': {source}")]
ShaderFileRead {
path: String,
#[source]
source: std::io::Error,
},
#[error("GLSL parse error in '{name}':\n{details}")]
GlslParse {
name: String,
details: String,
},
#[error("WGSL parse error for '{name}': {details}")]
WgslParse {
name: String,
details: String,
},
#[error("Shader validation failed for '{name}': {details}")]
ShaderValidation {
name: String,
details: String,
},
#[error("WGSL code generation failed for '{name}': {details}")]
WgslGeneration {
name: String,
details: String,
},
#[error("Shader error: {0}")]
NoActiveShader(String),
#[error("Image load failed for '{path}': {source}")]
ImageLoad {
path: String,
#[source]
source: image::ImageError,
},
#[error("Invalid RGBA data size: expected {expected} bytes, got {actual} bytes")]
InvalidTextureData {
expected: usize,
actual: usize,
},
#[error("Cubemap geometry error: {0}")]
CubemapGeometry(String),
#[error("Cubemap face file not found: {0}")]
CubemapFaceNotFound(String),
#[error("Shader renderer unavailable (possible GPU device loss): {0}")]
ShaderUnavailable(String),
#[error("GPU surface error: {0}")]
Surface(#[from] wgpu::SurfaceError),
#[error("Screenshot capture failed: {0}")]
ScreenshotMap(String),
#[error("Screenshot image assembly failed")]
ScreenshotImageAssembly,
}
impl From<wgpu::CreateSurfaceError> for RenderError {
fn from(e: wgpu::CreateSurfaceError) -> Self {
RenderError::SurfaceCreation(e.to_string())
}
}
impl From<wgpu::RequestDeviceError> for RenderError {
fn from(e: wgpu::RequestDeviceError) -> Self {
RenderError::DeviceError(e.to_string())
}
}