limelight-primitives

This 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.

```rust use limelight_primitives::{Circle, CircleLayer}; use limelight::Renderer;

fn drawcircles(renderer: &Renderer) { let circles = CircleLayer::new(); circles.buffer().setdata(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).

Primitives