bevy_webgl2 0.5.2

A webgl2 wasm32 render backend for Bevy Engine
use crate::renderer::*;
use bevy::{prelude::warn, render::texture::TextureFormat};

pub trait WebGl2From<T> {
    fn from(val: T) -> Self;
}

pub trait WebGl2Into<U> {
    fn webgl2_into(self) -> U;
}

impl<T, U> WebGl2Into<U> for T
where
    U: WebGl2From<T>,
{
    fn webgl2_into(self) -> U {
        U::from(self)
    }
}

impl WebGl2From<TextureFormat> for (u32, u32, u32) {
    fn from(val: TextureFormat) -> Self {
        match val {
            TextureFormat::R8Unorm => (Gl::R8, Gl::RED, Gl::UNSIGNED_BYTE),
            TextureFormat::R8Snorm => (Gl::R8_SNORM, Gl::RED, Gl::BYTE),
            TextureFormat::R8Uint => (Gl::R8UI, Gl::RED_INTEGER, Gl::UNSIGNED_BYTE),
            TextureFormat::R8Sint => (Gl::R8I, Gl::RGBA_INTEGER, Gl::INT),
            TextureFormat::R16Uint => (Gl::R16UI, Gl::RGBA_INTEGER, Gl::UNSIGNED_INT),
            TextureFormat::R16Sint => (Gl::R16I, Gl::RGBA_INTEGER, Gl::INT),
            TextureFormat::R16Float => (Gl::R16F, Gl::RED, Gl::HALF_FLOAT),
            TextureFormat::Rg8Unorm => (Gl::RG8, Gl::RG, Gl::UNSIGNED_BYTE),
            TextureFormat::Rg8Snorm => (Gl::RG8_SNORM, Gl::RG, Gl::BYTE),
            TextureFormat::Rg8Uint => (Gl::RG8UI, Gl::RG_INTEGER, Gl::UNSIGNED_BYTE),
            TextureFormat::Rg8Sint => (Gl::RG8I, Gl::RG_INTEGER, Gl::BYTE),
            TextureFormat::R32Uint => (Gl::R32UI, Gl::RED_INTEGER, Gl::UNSIGNED_INT),
            TextureFormat::R32Sint => (Gl::R32I, Gl::RED_INTEGER, Gl::INT),
            TextureFormat::R32Float => (Gl::R32F, Gl::RED, Gl::FLOAT),
            TextureFormat::Rg16Uint => (Gl::RG16UI, Gl::RG_INTEGER, Gl::UNSIGNED_SHORT),
            TextureFormat::Rg16Sint => (Gl::RG16I, Gl::RG_INTEGER, Gl::SHORT),
            TextureFormat::Rg16Float => (Gl::RG16F, Gl::RG, Gl::HALF_FLOAT),
            TextureFormat::Rgba8Unorm => (Gl::RGBA8, Gl::RGBA, Gl::UNSIGNED_BYTE),
            TextureFormat::Rgba8UnormSrgb => (Gl::SRGB8_ALPHA8, Gl::RGBA, Gl::UNSIGNED_BYTE),
            TextureFormat::Rgba8Snorm => (Gl::RGBA8_SNORM, Gl::RGBA, Gl::BYTE),
            TextureFormat::Rgba8Uint => (Gl::RGBA8UI, Gl::RGBA_INTEGER, Gl::UNSIGNED_BYTE),
            TextureFormat::Rgba8Sint => (Gl::RGBA8I, Gl::RGBA_INTEGER, Gl::BYTE),
            TextureFormat::Bgra8Unorm => {
                warn!("Bgra8Unorm is unsupported, using Rgba8Unorm instead");
                (Gl::RGBA8, Gl::RGBA, Gl::UNSIGNED_BYTE)
            }
            TextureFormat::Bgra8UnormSrgb => {
                warn!("Bgra8UnormSrgb is unsupported, using Rgba8UnormSrgb instead");
                (Gl::SRGB8_ALPHA8, Gl::RGBA, Gl::UNSIGNED_BYTE)
            }
            TextureFormat::Rgb10a2Unorm => {
                (Gl::RGB10_A2, Gl::RGBA, Gl::UNSIGNED_INT_2_10_10_10_REV)
            }
            TextureFormat::Rg11b10Float => (
                Gl::R11F_G11F_B10F,
                Gl::RGB,
                Gl::UNSIGNED_INT_10F_11F_11F_REV,
            ),
            TextureFormat::Rg32Uint => (Gl::RG32UI, Gl::RG_INTEGER, Gl::UNSIGNED_INT),
            TextureFormat::Rg32Sint => (Gl::RG32I, Gl::RG_INTEGER, Gl::INT),
            TextureFormat::Rg32Float => (Gl::RG32F, Gl::RG, Gl::FLOAT),
            TextureFormat::Rgba16Uint => (Gl::RGBA16UI, Gl::RGBA_INTEGER, Gl::UNSIGNED_SHORT),
            TextureFormat::Rgba16Sint => (Gl::RGBA16I, Gl::RGBA_INTEGER, Gl::SHORT),
            TextureFormat::Rgba16Float => (Gl::RGBA16F, Gl::RGBA, Gl::HALF_FLOAT),
            TextureFormat::Rgba32Uint => (Gl::RGBA32UI, Gl::RGBA_INTEGER, Gl::UNSIGNED_INT),
            TextureFormat::Rgba32Sint => (Gl::RGBA32I, Gl::RGBA_INTEGER, Gl::INT),
            TextureFormat::Rgba32Float => (Gl::RGBA32F, Gl::RGBA, Gl::FLOAT),
            TextureFormat::Depth32Float => (Gl::DEPTH_COMPONENT32F, Gl::DEPTH_COMPONENT, Gl::FLOAT),
            TextureFormat::Depth24Plus => (
                Gl::DEPTH24_STENCIL8,
                Gl::DEPTH_STENCIL,
                Gl::UNSIGNED_INT_24_8,
            ),
            TextureFormat::Depth24PlusStencil8 => (
                Gl::DEPTH24_STENCIL8,
                Gl::DEPTH_STENCIL,
                Gl::UNSIGNED_INT_24_8,
            ),
        }
    }
}