#[derive(Debug)] pub struct VertexArray { array: gl::types::GLuint, } impl VertexArray { pub fn new() -> Self { let mut array = 0; unsafe { gl::GenVertexArrays(1, &mut array); } Self { array } } pub fn draw(&self, primitive_kind: PrimitiveKind, start_index: u32, index_cnt: u32) { self.bind(); unsafe { #[allow(clippy::cast_possible_wrap)] gl::DrawArrays( primitive_kind.into_gl(), start_index as gl::types::GLint, index_cnt as gl::types::GLsizei, ); } } pub fn bind(&self) { unsafe { gl::BindVertexArray(self.array) } } } impl Drop for VertexArray { fn drop(&mut self) { unsafe { gl::DeleteVertexArrays(1, &self.array); } } } #[derive(Debug)] pub enum PrimitiveKind { Triangles, } impl PrimitiveKind { fn into_gl(self) -> gl::types::GLenum { match self { Self::Triangles => gl::TRIANGLES, } } }