use std::cell::Cell;
use std::rc::Rc;
use web_sys::{WebGl2RenderingContext, WebGlProgram, WebGlVertexArrayObject};
pub use engine::{
CanvasDims, RenderEngine, TextsDimensions, Texture, TextureBuilder, TextureInternalFormat,
TextureMagFilter, TextureMinFilter, TextureParameter, TextureWrap, VaoBuilder,
};
pub use uniform::{Uniform, UniformType, UniformValue};
mod engine;
mod uniform;
pub struct RenderObject {
pub program: Rc<WebGlProgram>,
pub vao: Rc<WebGlVertexArrayObject>,
pub draw_mode: DrawMode,
pub draw_num_indices: Rc<Cell<u32>>,
pub draw_offset_elements: Rc<Cell<usize>>,
pub uniforms: Box<[Rc<dyn UniformValue>]>,
pub textures: Box<[Texture]>,
}
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
#[repr(u32)]
pub enum DrawMode {
Points = WebGl2RenderingContext::POINTS,
LineStrip = WebGl2RenderingContext::LINE_STRIP,
LineLoop = WebGl2RenderingContext::LINE_LOOP,
Lines = WebGl2RenderingContext::LINES,
TriangleStrip = WebGl2RenderingContext::TRIANGLE_STRIP,
TriangleFan = WebGl2RenderingContext::TRIANGLE_FAN,
Triangles = WebGl2RenderingContext::TRIANGLES,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)]
pub struct ProgramSource<'a> {
pub vertex_shader: &'a str,
pub fragment_shader: &'a str,
}
pub mod texture_formats {
pub use super::engine::{LuminanceAlpha, R16f, Rgb, Rgba};
}