summaryrefslogtreecommitdiff
path: root/engine/src/renderer/vertex_array.rs
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src/renderer/vertex_array.rs')
-rw-r--r--engine/src/renderer/vertex_array.rs62
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,
+ }
+ }
+}