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 }
}
impl Drop for VertexArrayObject {
fn drop(&mut self) {
unsafe {
gl::DeleteVertexArrays(1, &mut self.id);
}
}
}