blittle 0.5.0

A fast little blitter
Documentation
use crate::Surface;
use crate::convert::PixelConverter;
use glam::Vec4;

impl<S: AsRef<[u8]> + AsMut<[u8]>> PixelConverter<u8> for Surface<'_, S, u8> {
    fn pixel_to_l8(pixel: &u8) -> u8 {
        *pixel
    }

    fn pixel_to_la8(pixel: &u8) -> [u8; 2] {
        [*pixel, 255]
    }

    fn pixel_to_l32(pixel: &u8) -> f32 {
        Self::u8_to_f32(*pixel)
    }

    fn pixel_to_la32(pixel: &u8) -> [f32; 2] {
        [Self::pixel_to_l32(pixel), 1.]
    }

    fn pixel_to_rgb8(pixel: &u8) -> [u8; 3] {
        [*pixel; 3]
    }

    fn pixel_to_rgba8(pixel: &u8) -> [u8; 4] {
        let p = *pixel;
        [p, p, p, 255]
    }

    fn pixel_to_rgba32(pixel: &u8) -> Vec4 {
        let p = Self::pixel_to_l32(pixel);
        Vec4::new(p, p, p, 1.)
    }
}

impl<S: AsRef<[u8]> + AsMut<[u8]>> Surface<'_, S, u8> {
    pub(crate) const fn u8_to_f32(pixel: u8) -> f32 {
        const U8_TO_F32: [f32; 256] = [
            0.0, 0.0039216, 0.0078431, 0.0117647, 0.0156863, 0.0196078, 0.0235294, 0.027451,
            0.0313725, 0.0352941, 0.0392157, 0.0431373, 0.0470588, 0.0509804, 0.054902, 0.0588235,
            0.0627451, 0.0666667, 0.0705882, 0.0745098, 0.0784314, 0.0823529, 0.0862745, 0.0901961,
            0.0941176, 0.0980392, 0.1019608, 0.1058824, 0.1098039, 0.1137255, 0.1176471, 0.1215686,
            0.1254902, 0.1294118, 0.1333333, 0.1372549, 0.1411765, 0.145098, 0.1490196, 0.1529412,
            0.1568627, 0.1607843, 0.1647059, 0.1686275, 0.172549, 0.1764706, 0.1803922, 0.1843137,
            0.1882353, 0.1921569, 0.1960784, 0.2, 0.2039216, 0.2078431, 0.2117647, 0.2156863,
            0.2196078, 0.2235294, 0.227451, 0.2313725, 0.2352941, 0.2392157, 0.2431373, 0.2470588,
            0.2509804, 0.254902, 0.2588235, 0.2627451, 0.2666667, 0.2705882, 0.2745098, 0.2784314,
            0.2823529, 0.2862745, 0.2901961, 0.2941176, 0.2980392, 0.3019608, 0.3058824, 0.3098039,
            0.3137255, 0.3176471, 0.3215686, 0.3254902, 0.3294118, 0.3333333, 0.3372549, 0.3411765,
            0.345098, 0.3490196, 0.3529412, 0.3568627, 0.3607843, 0.3647059, 0.3686275, 0.372549,
            0.3764706, 0.3803922, 0.3843137, 0.3882353, 0.3921569, 0.3960784, 0.4, 0.4039216,
            0.4078431, 0.4117647, 0.4156863, 0.4196078, 0.4235294, 0.427451, 0.4313725, 0.4352941,
            0.4392157, 0.4431373, 0.4470588, 0.4509804, 0.454902, 0.4588235, 0.4627451, 0.4666667,
            0.4705882, 0.4745098, 0.4784314, 0.4823529, 0.4862745, 0.4901961, 0.4941176, 0.4980392,
            0.5019608, 0.5058824, 0.5098039, 0.5137255, 0.5176471, 0.5215686, 0.5254902, 0.5294118,
            0.5333333, 0.5372549, 0.5411765, 0.545098, 0.5490196, 0.5529412, 0.5568627, 0.5607843,
            0.5647059, 0.5686275, 0.572549, 0.5764706, 0.5803922, 0.5843137, 0.5882353, 0.5921569,
            0.5960784, 0.6, 0.6039216, 0.6078431, 0.6117647, 0.6156863, 0.6196078, 0.6235294,
            0.627451, 0.6313725, 0.6352941, 0.6392157, 0.6431373, 0.6470588, 0.6509804, 0.654902,
            0.6588235, 0.6627451, 0.6666667, 0.6705882, 0.6745098, 0.6784314, 0.6823529, 0.6862745,
            0.6901961, 0.6941176, 0.6980392, 0.7019608, 0.7058824, 0.7098039, 0.7137255, 0.7176471,
            0.7215686, 0.7254902, 0.7294118, 0.7333333, 0.7372549, 0.7411765, 0.745098, 0.7490196,
            0.7529412, 0.7568627, 0.7607843, 0.7647059, 0.7686275, 0.772549, 0.7764706, 0.7803922,
            0.7843137, 0.7882353, 0.7921569, 0.7960784, 0.8, 0.8039216, 0.8078431, 0.8117647,
            0.8156863, 0.8196078, 0.8235294, 0.827451, 0.8313725, 0.8352941, 0.8392157, 0.8431373,
            0.8470588, 0.8509804, 0.854902, 0.8588235, 0.8627451, 0.8666667, 0.8705882, 0.8745098,
            0.8784314, 0.8823529, 0.8862745, 0.8901961, 0.8941176, 0.8980392, 0.9019608, 0.9058824,
            0.9098039, 0.9137255, 0.9176471, 0.9215686, 0.9254902, 0.9294118, 0.9333333, 0.9372549,
            0.9411765, 0.945098, 0.9490196, 0.9529412, 0.9568627, 0.9607843, 0.9647059, 0.9686275,
            0.972549, 0.9764706, 0.9803922, 0.9843137, 0.9882353, 0.9921569, 0.9960784, 1.0,
        ];

        U8_TO_F32[pixel as usize]
    }
}