Module azul_glium::buffer
source · Expand description
A buffer is a memory location accessible to the video card.
The purpose of buffers is to serve as a space where the GPU can read from or write data to. It can contain a list of vertices, indices, uniform data, etc.
Buffers management in glium
There are three levels of abstraction in glium:
- An
Alloc
corresponds to an OpenGL buffer object and is unsafe to use. This type is not public. - A
Buffer
wraps around anAlloc
and provides safety by handling the data type and fences. - The
VertexBuffer
,IndexBuffer
,UniformBuffer
,PixelBuffer
, etc. types are abstractions over aBuffer
indicating their specific purpose. They implementDeref
for theBuffer
. These types are in thevertex
,index
, etc. modules.
Unsized types
In order to put some data in a buffer, it must implement the Content
trait. This trait is
automatically implemented on all Sized
types and on slices (like [u8]
). This means that
you can create a Buffer<Foo>
(if Foo
is sized) or a Buffer<[u8]>
for example without
worrying about it.
However unsized structs don’t automatically implement this trait and you must call the
implement_buffer_content!
macro on them. You must then use the empty_unsized
constructor.
struct Data {
data: [f32], // `[f32]` is unsized, therefore `Data` is unsized too
}
implement_buffer_content!(Data); // without this, you can't put `Data` in a glium buffer
// creates a buffer of 64 bytes, which thus holds 8 f32s
let mut buffer = glium::buffer::Buffer::<Data>::empty_unsized(&display, BufferType::UniformBuffer,
64, BufferMode::Default).unwrap();
// you can then write to it like you normally would
buffer.map().data[4] = 2.1;
Structs
Represents a view of a buffer.
Represents a sub-part of a buffer.
Slice of a
Buffer
without any type info.Represents a sub-part of a buffer.
Represents a sub-part of a buffer.
DEPRECATED. Only here for backward compatibility.
Represents a view of a buffer.
DEPRECATED. Only here for backward compatibility.
Represents a sub-part of a buffer.
DEPRECATED. Only here for backward compatibility.
Slice of a
Buffer
without any type info.DEPRECATED. Only here for backward compatibility.
Represents a sub-part of a buffer.
DEPRECATED. Only here for backward compatibility.
Represents a sub-part of a buffer.
Allows inserting a fence in the list.
A mapping of a buffer for reading and writing.
A mapping of a buffer for reading.
A mapping of a buffer for write only.
Enums
Error that can happen when creating a buffer.
How the buffer is created.
Type of a buffer.
Error that can happen when copying data between buffers.
Error that can happen when reading from a buffer.
Traits
Trait for types of data that can be put inside buffers.
Functions
Returns true if reading from a buffer is supported by the backend.