Skip to main content

radiant_rs/core/
mod.rs

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/// A vertex.
41#[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/// Radiant errors.
55#[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    /// Converts io error to radiant error
68    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    /// Converts image error to radiant error
81    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
94/// Radiant result.
95pub type Result<T> = result::Result<T, Error>;
96
97/// Converts Srgb to rgb and multiplies image color channels with alpha channel
98pub 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}