1#[derive(thiserror::Error, Debug)]
3#[non_exhaustive]
4pub enum Error {
5 #[error("Shader error: {0}")]
7 Shader(String),
8
9 #[error("Resource error: {0}")]
11 Resource(String),
12
13 #[error("Data error: {0}")]
15 Data(String),
16}
17
18impl Error {
19 pub(crate) fn shader_creation_failed(detail: &str) -> Self {
21 Self::Shader(format!("Shader creation failed: {detail}"))
22 }
23
24 pub(crate) fn shader_program_creation_failed(detail: impl std::fmt::Display) -> Self {
25 Self::Shader(format!("Shader program creation failed: {detail}"))
26 }
27
28 pub(crate) fn shader_compilation_failed(stage: impl std::fmt::Display, log: String) -> Self {
29 Self::Shader(format!("{stage} shader compilation failed: {log}"))
30 }
31
32 pub(crate) fn shader_link_failed(log: String) -> Self {
33 Self::Shader(format!("Shader linking failed: {log}"))
34 }
35
36 pub(crate) fn buffer_creation_failed(
38 buffer_type: &str,
39 detail: impl std::fmt::Display,
40 ) -> Self {
41 Self::Resource(format!("Failed to create {buffer_type} buffer: {detail}"))
42 }
43
44 pub(crate) fn vertex_array_creation_failed(detail: impl std::fmt::Display) -> Self {
45 Self::Resource(format!("Failed to create vertex array object: {detail}"))
46 }
47
48 pub(crate) fn texture_creation_failed(detail: impl std::fmt::Display) -> Self {
49 Self::Resource(format!("Failed to create texture: {detail}"))
50 }
51
52 pub(crate) fn uniform_location_failed(name: &str) -> Self {
53 Self::Resource(format!("Failed to get uniform location: {name}"))
54 }
55}