limelight-primitives

Crates.iolimelight-primitives
lib.rslimelight-primitives
version0.1.3
sourcesrc
created_at2021-12-15 18:37:10.380109
updated_at2021-12-15 18:37:10.380109
description2D shape primatives implemented with limelight.
homepage
repositoryhttps://github.com/drifting-in-space/limelight
max_upload_size
id498472
size17,598
Paul Butler (paulgb)

documentation

README

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.

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

Primitives

  • 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).
Commit count: 120

cargo fmt