1mod blendmode;
2mod display;
3mod input;
4mod layer;
5mod renderer;
6mod sprite;
7mod font;
8mod context;
9mod color;
10mod monitor;
11mod texture;
12mod program;
13mod uniform;
14mod postprocessor;
15mod builder;
16mod rendertarget;
17mod math;
18
19pub use self::blendmode::*;
20pub use self::input::*;
21pub use self::display::*;
22pub use self::sprite::*;
23pub use self::renderer::*;
24pub use self::font::*;
25pub use self::layer::*;
26pub use self::context::*;
27pub use self::color::*;
28pub use self::monitor::*;
29pub use self::texture::*;
30pub use self::program::*;
31pub use self::uniform::*;
32pub use self::postprocessor::*;
33pub use self::builder::*;
34pub use self::rendertarget::*;
35pub use self::math::*;
36use image;
37use crate::prelude::*;
38use crate::backends::backend;
39
40#[repr(C)]
42#[derive(Copy, Clone, Debug, Default)]
43pub struct Vertex {
44 pub position : [f32; 2],
45 pub offset : [f32; 2],
46 pub rotation : f32,
47 pub color : [f32; 4],
48 pub bucket_id : u32,
49 pub texture_id : u32,
50 pub texture_uv : [f32; 2],
51 pub components : u32,
52}
53
54#[derive(Debug)]
56pub enum Error {
57 ImageError(String),
58 ShaderError(String),
59 IoError(io::Error),
60 FullscreenError(String),
61 FontError(String),
62 BackendError(backend::Error),
63 Failed,
64}
65
66impl From<io::Error> for Error {
67 fn from(error: io::Error) -> Error {
69 Error::IoError(error)
70 }
71}
72
73impl From<backend::Error> for Error {
74 fn from(error: backend::Error) -> Error {
75 Error::BackendError(error)
76 }
77}
78
79impl From<image::ImageError> for Error {
80 fn from(error: image::ImageError) -> Error {
82 use image::ImageError;
83 match error {
84 ImageError::IoError(error) => { Error::IoError(error) }
85 ImageError::Decoding(error) => { Error::ImageError(format!("Image decoding error: {}", error)) }
86 ImageError::Encoding(error) => { Error::ImageError(format!("Image encoding error: {}", error)) }
87 ImageError::Parameter(error) => { Error::ImageError(format!("Image parameter error: {}", error)) }
88 ImageError::Limits(error) => { Error::ImageError(format!("Image limits error: {}", error)) }
89 ImageError::Unsupported(error) => { Error::ImageError(format!("Image unsupported: {}", error)) }
90 }
91 }
92}
93
94pub type Result<T> = result::Result<T, Error>;
96
97pub fn convert_color(mut image: image::RgbaImage) -> image::RgbaImage {
99 use palette::encoding::{Srgb, IntoLinear};
100 for (_, _, pixel) in image.enumerate_pixels_mut() {
101 let alpha = pixel[3] as f32 / 255.0;
102 let r = Srgb::into_linear(pixel[0] as f32 / 255.0);
103 let g = Srgb::into_linear(pixel[1] as f32 / 255.0);
104 let b = Srgb::into_linear(pixel[2] as f32 / 255.0);
105 pixel[0] = (alpha * r * 255.0) as u8;
106 pixel[1] = (alpha * g * 255.0) as u8;
107 pixel[2] = (alpha * b * 255.0) as u8;
108 }
109 image
110}