use js_sys::{Float32Array, Object, Uint16Array, Uint8Array};
use std::ops::Deref;
use web_sys::WebGl2RenderingContext;
pub trait ArrayView: Sized {
type JS: Deref<Target = Object>;
const GL_TYPE: u32;
unsafe fn view(rust: &[Self]) -> Self::JS;
}
macro_rules! impl_array_view {
($rust:ty, $js:ty, $gl:expr) => {
impl ArrayView for $rust {
type JS = $js;
const GL_TYPE: u32 = $gl;
unsafe fn view(rust: &[$rust]) -> $js {
<$js>::view(rust)
}
}
};
}
impl_array_view!(f32, Float32Array, WebGl2RenderingContext::FLOAT);
impl_array_view!(u16, Uint16Array, WebGl2RenderingContext::UNSIGNED_INT);
impl_array_view!(u8, Uint8Array, WebGl2RenderingContext::UNSIGNED_BYTE);