1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
use crate::Resource;
use crate::data::Buffer;

pub struct VertexArrayObject {
    id : u32,
    vertices: u32
}

impl Resource for VertexArrayObject {
    fn get_id(&self) -> u32 { self.id }
}

impl VertexArrayObject {
    pub fn new() -> VertexArrayObject {
        let mut id = 0;
        unsafe {
            gl::GenVertexArrays(1, &mut id);
        };

        VertexArrayObject {
            id : id,
            vertices : 0
        }
    }

    pub fn set_vertex_buffer(&mut self, buffer : &Buffer, index: u32, elements: u32) {
        unsafe {
            gl::BindVertexArray(self.id);
            gl::BindBuffer(gl::ARRAY_BUFFER, buffer.get_id());
            gl::EnableVertexAttribArray(index);
            gl::VertexAttribPointer(index, elements as i32, gl::FLOAT, gl::FALSE, 0, std::ptr::null());
        }
    }

    pub fn set_vertices(&mut self, vertices : u32) {
        self.vertices = vertices;
    }

    pub fn get_vertices(&self) -> u32 { self.vertices }

    // pub fn set_index_buffer(&mut self, buffer : &Buffer, elements: u32) {
    //     unsafe {
    //         gl::BindVertexArray(self.id);
    //         gl::BindBuffer(gl::ELEMENT_ARRAY_BUFFER, buffer.id);
    //         gl::
    //     }
    // }
}

impl Drop for VertexArrayObject {
    fn drop(&mut self) {
        unsafe {
            gl::DeleteVertexArrays(1, &mut self.id);
        }
    }
}