| Crates.io | limelight-primitives |
| lib.rs | limelight-primitives |
| version | 0.1.3 |
| created_at | 2021-12-15 18:37:10.380109+00 |
| updated_at | 2021-12-15 18:37:10.380109+00 |
| description | 2D shape primatives implemented with limelight. |
| homepage | |
| repository | https://github.com/drifting-in-space/limelight |
| max_upload_size | |
| id | 498472 |
| size | 17,598 |
limelight-primitivesThis crate implements a number of 2D shapes that can be drawn with a
limelight Renderer.
Each primitive comes with two parts: a data structure (like Rect or Circle) representing
the raw shape data that is sent to the GPU, and a layer (like RectLayer and CircleLayer)
that implements Drawable
and can draw itself when passed a Renderer instance.
All layers are capable of drawing multiple instances of the shape they represent.
use limelight_primitives::{Circle, CircleLayer};
use limelight::Renderer;
fn draw_circles(renderer: &Renderer) {
let circles = CircleLayer::new();
circles.buffer().set_data(vec![
Circle {
position: [0., 0.25],
radius: 0.2,
color: palette::named::WHITE.into(),
},
Circle {
position: [0., 0.25],
radius: 0.1,
color: palette::named::ORANGERED.into(),
},
]);
self.circles.draw(renderer)?;
}
The .buffer() method returns a Buffer of the relevant type, e.g. RectLayer::buffer() returns a Buffer<Rect>, which you
can use to update the rectangle data at any time.
Layers also expose a Uniform<[[f32; 4]; 4]> that acts as a transformation matrix on the points.
For an example that uses uniforms, see the primitive scene demo (code).
Circle: filled circles.Rect: filled rectangle.Line: straight line of arbitrary (scaled) thickness.Hairline: axis-aligned line with unscaled thickness (i.e. thickness is independent of zoom level; useful for grids and axes).