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.
✓ 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) ✓
- Anti Aliasing ◯
- Filling
- Paths
- Polygons ✓
- Bezier Curves
- Integral (Normal)
- Quadratic ✓
- Cubic ✓
- Rational (Weighted)
- Quadratic ✓
- Cubic ✓
- Integral (Normal)
- Winding Fill Rules ✓
- Paths
- Stroking
- Paths
- Polygons ✓
- Bezier Curves
- Approximation
- Uniformly Spaced Parameters ✓
- Uniform Tangent Angle ✓
- Uniform Arc Length ✗
- Integral (Normal)
- Quadratic ✓
- Cubic ✓
- Rational (Weighted)
- Quadratic ✓
- Cubic ✓
- Approximation
- 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) ✓
- Paths
- Path Constructors
- Polygon ✓
- Bezier Curves
- Integral (Normal)
- Quadratic ✓
- Cubic ✓
- Rational (Weighted)
- Quadratic ✓
- Cubic ✓
- Integral (Normal)
- Rect ✓
- Rounded Rect ✓
- Ellipse ✓
- Circle ✓
- Elliptical Arc ✓
- [Optional] Font (TTF)
- Glyph ✓
- Text ◯
- Graphical User Interface ✗
- Graphics API: wgpu
- Geometric Algebra: geometric_algebra
- [Optional] Font Loader: ttf-parser