[−][src]Module web_glitz::buffer
GPU-accessible memory buffers that contain typed data.
Initialization
A buffer can store any type that is both Sized and Copy. We can for example store an InterfaceBlock type (which we might later use to provide data to a uniform block in a pipeline):
use web_glitz::buffer::UsageHint; // We use the `std140` crate to ensure that the layout of our `Uniforms` type conforms to // the std140 data layout. #[std140::repr_std140] #[derive(web_glitz::derive::InterfaceBlock, Clone, Copy)] struct Uniforms { scale: std140::float, } let uniforms = Uniforms { scale: std140::float(0.5), }; let uniform_buffer = context.create_buffer(uniforms, UsageHint::DynamicDraw);
Here context is a RenderingContext. We use UsageHint::DynamicDraw to indicate that we
intend to read this buffer on the GPU and we intend to modify the contents of the buffer
repeatedly (see UsageHint for details).
A buffer can also store an array of any type T that is both Sized and Copy, by
initializing it with a type that implements Borrow<[T]>. We can for example store an array
of Vertex values:
use web_glitz::buffer::{Buffer, UsageHint}; #[derive(web_glitz::derive::Vertex, Clone, Copy)] struct Vertex { #[vertex_attribute(location = 0, format = "Float2_f32")] position: [f32; 2], #[vertex_attribute(location = 1, format = "Float3_u8_norm")] color: [u8; 3], } let vertex_data = [ Vertex { position: [0.0, 0.5], color: [255, 0, 0], }, Vertex { position: [-0.5, -0.5], color: [0, 255, 0], }, Vertex { position: [0.5, -0.5], color: [0, 0, 255], }, ]; let vertex_buffer: Buffer<[Vertex]> = context.create_buffer(vertex_data, UsageHint::StaticDraw);
Note that RenderingContext::create_buffer takes ownership of the data source (vertex_data
in the example) and that the data source must be 'static. It is however possible to use shared
ownership constructs like Rc or Arc. We use a UsageHint::StaticDraw to once again
indiciate that we wish to read this data on the GPU, but this time we don't intend to modify the
data in the buffer later.
Structs
| Buffer | A GPU-accessible memory buffer that contains typed data. |
| BufferId | |
| BufferView | A view on a segment or the whole of a Buffer. |
| BufferViewMut | |
| DownloadCommand | Command for downloading data from a Buffer or a sub-section of a buffer as viewed by a BufferView. |
| UploadCommand | Command for uploading data to a Buffer or a sub-section of a buffer as viewed by a BufferView. |
Enums
| UsageHint | Enumerates the available usage hint for Buffers. |
Traits
| BufferSliceIndex | A helper trait type for indexing operations on a Buffer that contains a slice. |
| BufferViewMutSliceIndex | A helper trait type for indexing operations on a BufferViewMut that contains a slice. |
| BufferViewSliceIndex | A helper trait type for indexing operations on a BufferView that contains a slice. |
| IntoBuffer | Trait implemented for types that represent or contain data that may be stored in a Buffer. |