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("Invalid render state: {0}")]
InvalidRenderState(String),
#[error(
"WGPU secondary viewport rendering requires a reconciled frame before platform callbacks"
)]
FrameNotPrepared,
#[error("WGPU frame epoch {received} is older than active epoch {active}")]
FrameEpochOutOfOrder { active: u64, received: u64 },
#[error("WGPU renderer is not bound to a Dear ImGui context")]
ContextNotBound,
#[error("the Dear ImGui context bound to this WGPU renderer has been dropped")]
ContextDropped,
#[error("WGPU renderer received a different Dear ImGui context than its bound context")]
ContextMismatch,
#[error("Dear ImGui context is already configured for a renderer backend")]
ContextAlreadyHasRenderer,
#[error("WGPU renderer lost ownership of Dear ImGui field `{field}`")]
RendererStateDrift { field: &'static str },
#[error("{buffer} draw buffer length exceeds renderer limits")]
DrawBufferTooLarge { buffer: &'static str },
#[error("{buffer} draw buffer offset overflow")]
DrawBufferOffsetOverflow { buffer: &'static str },
#[error("draw command index range {start}..{end} exceeds its parent index buffer length {len}")]
DrawCommandIndexRangeOutOfBounds {
start: usize,
end: usize,
len: usize,
},
#[error(
"draw command references vertex {index}, but its parent vertex buffer has length {len}"
)]
DrawCommandVertexOutOfBounds { index: usize, len: usize },
#[error("raw draw callbacks are not supported by the WGPU renderer on this target")]
RawDrawCallbackUnsupported,
#[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),
#[error("WGPU texture identifier space is exhausted")]
TextureIdExhausted,
#[error("external WGPU texture is not registered: {0:?}")]
ExternalTextureNotFound(dear_imgui_rs::TextureId),
#[error(
"managed texture {0:?} has no WGPU resource; reset renderer bindings to request a full create"
)]
ManagedTextureMissing(dear_imgui_rs::render::SnapshotTextureId),
#[error(
"managed texture {texture:?} layout changed without a new identity: expected {expected:?}, got {actual:?}"
)]
ManagedTextureLayoutMismatch {
texture: dear_imgui_rs::render::SnapshotTextureId,
expected: [u32; 2],
actual: [u32; 2],
},
#[error(transparent)]
RendererConsumer(#[from] dear_imgui_rs::render::RendererConsumerError),
#[error(transparent)]
FrameCapture(#[from] dear_imgui_rs::render::SnapshotError),
#[error(transparent)]
ContextAttachment(#[from] dear_imgui_rs::ContextAttachmentError),
#[error(transparent)]
TextureFeedback(#[from] dear_imgui_rs::render::TextureFeedbackError),
}