diff options
Diffstat (limited to 'engine/src/renderer/vertex_array.rs')
-rw-r--r-- | engine/src/renderer/vertex_array.rs | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/engine/src/renderer/vertex_array.rs b/engine/src/renderer/vertex_array.rs new file mode 100644 index 0000000..e54f638 --- /dev/null +++ b/engine/src/renderer/vertex_array.rs @@ -0,0 +1,62 @@ +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); + } + } +} + +pub enum PrimitiveKind +{ + Triangles, +} + +impl PrimitiveKind +{ + fn into_gl(self) -> gl::types::GLenum + { + match self { + Self::Triangles => gl::TRIANGLES, + } + } +} |