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
mod errors; use errors::*; mod immutable_buffer; pub use self::immutable_buffer::*; mod mutable_buffer; pub use self::mutable_buffer::*; mod mapped_mutable_buffer; pub use self::mapped_mutable_buffer::*; use raw::*; pub trait Buffer { fn get_id(&self) -> BufferId; fn bind_base(&self, target: BufferBaseTarget, index: usize) -> Result<()> { unsafe { bind_buffer_base(target, BlockIndex(index as u32), self.get_id()).chain_err(|| "Could not bind buffer")?; } Ok(()) } fn bind_range(&self, target: BufferBaseTarget, index: usize, offset: usize, size: usize) -> Result<()> { unsafe { bind_buffer_range( target, BlockIndex(index as u32), self.get_id(), offset, size, ).chain_err(|| "Could not bind buffer range")?; } Ok(()) } fn bind_as_indirect(&self) -> Result<()> { unsafe { bind_buffer(BindBufferTarget::DrawIndirectBuffer, self.get_id()) .chain_err(|| "Could not bind draw indirect buffer")?; } Ok(()) } }