#webgl #shape #primitive #limelight #2d #circle #layer

limelight-primitives

使用 limelight 实现的 2D 形状原语

1 个不稳定版本

0.1.3 2021 年 12 月 15 日

#875 in 图形API

MIT 许可证

78KB
2K SLoC

limelight-primitives

此 crate 实现了多个 2D 形状,可以使用 limelight 的 Renderer 绘制。

每个原语包含两部分:一个数据结构(如 RectCircle)代表发送到 GPU 的原始形状数据,以及一个实现 Drawable 并可以在传递一个 Renderer 实例时绘制自身的层(如 RectLayerCircleLayer)。

所有层都可以绘制它们所代表的形状的多个实例。

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)?;
}

.buffer() 方法返回相关类型的 Buffer,例如 RectLayer::buffer() 返回一个 Buffer<Rect>,您可以使用它来随时更新矩形数据。

层还公开了一个 Uniform<[[f32; 4]; 4]>,它充当点上的 变换矩阵

有关使用均匀值的示例,请参阅 原语场景演示 (代码)。

原语

  • Circle:填充圆。
  • Rect:填充矩形。
  • Line:任意(缩放)厚度的直线。
  • Hairline:厚度未缩放的轴对齐线(即厚度不随缩放级别变化;适用于网格和坐标轴)。

依赖项

~12MB
~231K SLoC