3 releases

0.1.2 Jul 24, 2023
0.1.1 Jul 9, 2022
0.1.0 Apr 18, 2021

#477 in Graphics APIs

MIT license

195KB
3.5K SLoC

actions Docs crates.io

Contrast Renderer

Contrast is a web-gpu based 2D renderer written in Rust. It renders planar vector graphics and can easily be integrated with other forward-rendering code. Filling uses implicit curves and is resolution-independent, while stroking uses parametric curves and is approximated via polygon tesselation. This way you can have non-diegetic, diegetic and spacial GUI elements on any flat plane:

  • As classic 2D menu overlay on top of the 3D scene.
  • As HUD fixed relative to the camera movement but occluded by the 3D scene.
  • As decals on walls or holograms hovering in the 3D scene.

To get started, checkout the showcase example.

Feature Roadmap

✓ Supported and implemented
◯ Rudimentary support
✗ Planned support, not implemented
  • Rendering
    • Anti Aliasing ◯
      • MSAA ✓
    • Instancing ✓
    • Customizable (User Defined)
      • Shaders ✓
      • Blending ✓
      • Depth Test ✓
      • Back Face Culling ✓
    • Nestable Clipping ✓
    • Nestable Transparency Layers (Group Opacity) ✓
  • Filling
    • Paths
      • Polygons ✓
      • Bezier Curves
        • Integral (Normal)
          • Quadratic ✓
          • Cubic ✓
        • Rational (Weighted)
          • Quadratic ✓
          • Cubic ✓
    • Winding Fill Rules ✓
  • Stroking
    • Paths
      • Polygons ✓
      • Bezier Curves
        • Approximation
          • Uniformly Spaced Parameters ✓
          • Uniform Tangent Angle ✓
          • Uniform Arc Length ✗
        • Integral (Normal)
          • Quadratic ✓
          • Cubic ✓
        • Rational (Weighted)
          • Quadratic ✓
          • Cubic ✓
    • Stroke Width ✓
    • Stroke Offset ◯
    • Closed / Open ✓
    • Line Joins
      • (Clipped) Miter ✓
      • Bevel ✓
      • Round ✓
    • Line Caps (Square, Round, Out, In, Right, Left, Butt) ✓
    • Dashing
      • Phase Translation ✓
      • Repeating Gap Intervals ✓
      • Dynamically Adjustable (for Animations) ✓
  • Path Constructors
    • Polygon ✓
    • Bezier Curves
      • Integral (Normal)
        • Quadratic ✓
        • Cubic ✓
      • Rational (Weighted)
        • Quadratic ✓
        • Cubic ✓
    • Rect ✓
    • Rounded Rect ✓
    • Ellipse ✓
    • Circle ✓
    • Elliptical Arc ✓
    • [Optional] Font (TTF)
      • Glyph ✓
      • Text ◯
  • Graphical User Interface ✗

Dependencies

Dependencies of the Library

Dependencies of the Examples

Dependencies

~6–37MB
~570K SLoC