mallumo_gls/buffer/
immutable_buffer.rs1use super::Buffer;
2use super::errors::*;
3
4use std::mem::size_of;
5
6use raw::{create_buffer, delete_buffer, named_buffer_storage, BufferData, BufferId, BufferMutability};
7
8#[derive(Debug)]
9pub struct ImmutableBuffer {
10 id: BufferId,
11}
12
13impl ImmutableBuffer {
14 pub fn new<T>(data: &[T]) -> Result<ImmutableBuffer> {
20 if data.len() * size_of::<T>() == 0 {
21 bail!("Buffer size must be greater than 0");
22 }
23
24 let id = create_buffer();
25
26 unsafe {
27 named_buffer_storage(
28 id,
29 BufferData::Data(data),
30 BufferMutability::Immutable,
31 None,
32 ).chain_err(|| ErrorKind::BufferCreationError)?;
33 }
34
35 Ok(ImmutableBuffer { id: id })
36 }
37}
38
39impl Buffer for ImmutableBuffer {
40 fn get_id(&self) -> BufferId {
41 self.id
42 }
43}
44
45impl Drop for ImmutableBuffer {
46 fn drop(&mut self) {
47 unsafe {
48 delete_buffer(self.id);
49 }
50 }
51}