use thiserror::Error;
pub type RendererResult<T> = Result<T, RendererError>;
#[derive(Error, Debug)]
#[non_exhaustive]
pub enum RendererError {
#[error("Renderer error: {0}")]
Generic(String),
#[error("Bad texture error: {0}")]
BadTexture(String),
#[error("Device lost")]
DeviceLost,
#[error("Invalid render state: {0}")]
InvalidRenderState(String),
#[error("{buffer} draw buffer length exceeds renderer limits")]
DrawBufferTooLarge { buffer: &'static str },
#[error("{buffer} draw buffer offset overflow")]
DrawBufferOffsetOverflow { buffer: &'static str },
#[error("Buffer creation failed: {0}")]
BufferCreationFailed(String),
#[error("Texture creation failed: {0}")]
TextureCreationFailed(String),
#[error("Pipeline creation failed: {0}")]
PipelineCreationFailed(String),
#[error("Shader compilation failed: {0}")]
ShaderCompilationFailed(String),
#[error("WGPU error")]
Wgpu(#[from] wgpu::Error),
#[error("Invalid texture ID: {0:?}")]
InvalidTextureId(dear_imgui_rs::TextureId),
}