1use thiserror::Error;
4
5pub type RendererResult<T> = Result<T, RendererError>;
7
8#[derive(Error, Debug)]
10#[non_exhaustive]
11pub enum RendererError {
12 #[error("Renderer error: {0}")]
14 Generic(String),
15
16 #[error("Bad texture error: {0}")]
18 BadTexture(String),
19
20 #[error("Invalid render state: {0}")]
22 InvalidRenderState(String),
23
24 #[error(
26 "WGPU secondary viewport rendering requires a reconciled frame before platform callbacks"
27 )]
28 FrameNotPrepared,
29
30 #[error("WGPU frame epoch {received} is older than active epoch {active}")]
32 FrameEpochOutOfOrder { active: u64, received: u64 },
33
34 #[error("WGPU renderer is not bound to a Dear ImGui context")]
36 ContextNotBound,
37
38 #[error("the Dear ImGui context bound to this WGPU renderer has been dropped")]
40 ContextDropped,
41
42 #[error("WGPU renderer received a different Dear ImGui context than its bound context")]
44 ContextMismatch,
45
46 #[error("Dear ImGui context is already configured for a renderer backend")]
48 ContextAlreadyHasRenderer,
49
50 #[error("WGPU renderer lost ownership of Dear ImGui field `{field}`")]
52 RendererStateDrift { field: &'static str },
53
54 #[error("{buffer} draw buffer length exceeds renderer limits")]
56 DrawBufferTooLarge { buffer: &'static str },
57
58 #[error("{buffer} draw buffer offset overflow")]
60 DrawBufferOffsetOverflow { buffer: &'static str },
61
62 #[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 #[error(
72 "draw command references vertex {index}, but its parent vertex buffer has length {len}"
73 )]
74 DrawCommandVertexOutOfBounds { index: usize, len: usize },
75
76 #[error("raw draw callbacks are not supported by the WGPU renderer on this target")]
78 RawDrawCallbackUnsupported,
79
80 #[error("Buffer creation failed: {0}")]
82 BufferCreationFailed(String),
83
84 #[error("Texture creation failed: {0}")]
86 TextureCreationFailed(String),
87
88 #[error("Pipeline creation failed: {0}")]
90 PipelineCreationFailed(String),
91
92 #[error("Shader compilation failed: {0}")]
94 ShaderCompilationFailed(String),
95
96 #[error("WGPU error")]
98 Wgpu(#[from] wgpu::Error),
99
100 #[error("Invalid texture ID: {0:?}")]
102 InvalidTextureId(dear_imgui_rs::TextureId),
103
104 #[error("WGPU texture identifier space is exhausted")]
106 TextureIdExhausted,
107
108 #[error("external WGPU texture is not registered: {0:?}")]
110 ExternalTextureNotFound(dear_imgui_rs::TextureId),
111
112 #[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 #[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 #[error(transparent)]
130 RendererConsumer(#[from] dear_imgui_rs::render::RendererConsumerError),
131
132 #[error(transparent)]
134 FrameCapture(#[from] dear_imgui_rs::render::SnapshotError),
135
136 #[error(transparent)]
138 ContextAttachment(#[from] dear_imgui_rs::ContextAttachmentError),
139
140 #[error(transparent)]
142 TextureFeedback(#[from] dear_imgui_rs::render::TextureFeedbackError),
143}
144
145