Skip to main content

dear_imgui_wgpu/
error.rs

1//! Error types for the WGPU renderer
2
3use thiserror::Error;
4
5/// Result type for renderer operations
6pub type RendererResult<T> = Result<T, RendererError>;
7
8/// Errors that can occur during rendering operations
9#[derive(Error, Debug)]
10#[non_exhaustive]
11pub enum RendererError {
12    /// Generic error with message
13    #[error("Renderer error: {0}")]
14    Generic(String),
15
16    /// Bad texture error
17    #[error("Bad texture error: {0}")]
18    BadTexture(String),
19
20    /// Invalid render state
21    #[error("Invalid render state: {0}")]
22    InvalidRenderState(String),
23
24    /// Secondary viewport rendering began before the Context frame was reconciled.
25    #[error(
26        "WGPU secondary viewport rendering requires a reconciled frame before platform callbacks"
27    )]
28    FrameNotPrepared,
29
30    /// A frame older than the renderer's active resource epoch was supplied.
31    #[error("WGPU frame epoch {received} is older than active epoch {active}")]
32    FrameEpochOutOfOrder { active: u64, received: u64 },
33
34    /// The renderer has not been attached to a Dear ImGui context.
35    #[error("WGPU renderer is not bound to a Dear ImGui context")]
36    ContextNotBound,
37
38    /// The Dear ImGui context used to initialize the renderer has been dropped.
39    #[error("the Dear ImGui context bound to this WGPU renderer has been dropped")]
40    ContextDropped,
41
42    /// A context-taking operation received a context other than the renderer owner.
43    #[error("WGPU renderer received a different Dear ImGui context than its bound context")]
44    ContextMismatch,
45
46    /// The context already has renderer-owned state that this renderer cannot claim safely.
47    #[error("Dear ImGui context is already configured for a renderer backend")]
48    ContextAlreadyHasRenderer,
49
50    /// Renderer-owned Dear ImGui state changed while this renderer remained attached.
51    #[error("WGPU renderer lost ownership of Dear ImGui field `{field}`")]
52    RendererStateDrift { field: &'static str },
53
54    /// Draw buffer length exceeds renderer index ranges.
55    #[error("{buffer} draw buffer length exceeds renderer limits")]
56    DrawBufferTooLarge { buffer: &'static str },
57
58    /// Draw buffer offset overflowed while accumulating draw lists.
59    #[error("{buffer} draw buffer offset overflow")]
60    DrawBufferOffsetOverflow { buffer: &'static str },
61
62    /// A draw command addresses indices outside its parent draw list.
63    #[error("draw command index range {start}..{end} exceeds its parent index buffer length {len}")]
64    DrawCommandIndexRangeOutOfBounds {
65        start: usize,
66        end: usize,
67        len: usize,
68    },
69
70    /// A draw command references a vertex outside its parent draw list.
71    #[error(
72        "draw command references vertex {index}, but its parent vertex buffer has length {len}"
73    )]
74    DrawCommandVertexOutOfBounds { index: usize, len: usize },
75
76    /// Native raw draw callbacks cannot be invoked by this target.
77    #[error("raw draw callbacks are not supported by the WGPU renderer on this target")]
78    RawDrawCallbackUnsupported,
79
80    /// Buffer creation failed
81    #[error("Buffer creation failed: {0}")]
82    BufferCreationFailed(String),
83
84    /// Texture creation failed
85    #[error("Texture creation failed: {0}")]
86    TextureCreationFailed(String),
87
88    /// Pipeline creation failed
89    #[error("Pipeline creation failed: {0}")]
90    PipelineCreationFailed(String),
91
92    /// Shader compilation failed
93    #[error("Shader compilation failed: {0}")]
94    ShaderCompilationFailed(String),
95
96    /// WGPU error
97    #[error("WGPU error")]
98    Wgpu(#[from] wgpu::Error),
99
100    /// Invalid texture ID
101    #[error("Invalid texture ID: {0:?}")]
102    InvalidTextureId(dear_imgui_rs::TextureId),
103
104    /// The process-wide renderer texture identifier space is exhausted.
105    #[error("WGPU texture identifier space is exhausted")]
106    TextureIdExhausted,
107
108    /// An external texture handle does not belong to this renderer or was already removed.
109    #[error("external WGPU texture is not registered: {0:?}")]
110    ExternalTextureNotFound(dear_imgui_rs::TextureId),
111
112    /// A managed update arrived after the renderer lost its matching GPU resource.
113    #[error(
114        "managed texture {0:?} has no WGPU resource; reset renderer bindings to request a full create"
115    )]
116    ManagedTextureMissing(dear_imgui_rs::render::SnapshotTextureId),
117
118    /// A managed identity was reused with incompatible dimensions.
119    #[error(
120        "managed texture {texture:?} layout changed without a new identity: expected {expected:?}, got {actual:?}"
121    )]
122    ManagedTextureLayoutMismatch {
123        texture: dear_imgui_rs::render::SnapshotTextureId,
124        expected: [u32; 2],
125        actual: [u32; 2],
126    },
127
128    /// Context-owned renderer consumer state rejected the operation.
129    #[error(transparent)]
130    RendererConsumer(#[from] dear_imgui_rs::render::RendererConsumerError),
131
132    /// Managed frame finalization or texture-request capture failed.
133    #[error(transparent)]
134    FrameCapture(#[from] dear_imgui_rs::render::SnapshotError),
135
136    /// Context attachment registration rejected the renderer's deferred-drop cleanup hook.
137    #[error(transparent)]
138    ContextAttachment(#[from] dear_imgui_rs::ContextAttachmentError),
139
140    /// A request was completed with the wrong feedback kind.
141    #[error(transparent)]
142    TextureFeedback(#[from] dear_imgui_rs::render::TextureFeedbackError),
143}
144
145// Display and Error traits are automatically implemented by thiserror