rvg 0.1.0

Vector graphics file format.
Documentation
# RVG Format Spec
RVG files are a binary SVG-like document, with 3D, animations, and albums.

## Example File Layout
After decompressing with zstandard, layout will look like this.  Floating point
numbers may only be NAN if they are closing a section of the file.

```
# RvgFile
FORMAT: u32                             # b"rVg\x00"
ATTRIBUTE_LIST: [Attribute]             # List of vertex attributes
VERTEX_LIST: [f32x(2+N)]                # 2D Points + Attributes (until NAN)
GROUP: [Group]                          # Groups until empty path
GRAPHICS: [Graphic]                     # Graphics
BITMAPS: [Bitmap]?                      # Optional Bitmaps (until EOF)

# Attribute
0u8: End                                # End attribute List
1u8: Z                                  # Z, 1 dimensions (until NAN)
2u8: UvTextureCoordinates               # UV Texcoords, 2 dim. (until NAN)
3u8: Rgb                                # RGB Gradient, 3 dim. (until NAN)
4u8: Rgba                               # RGBA Gradient, 4 dim. (until NAN)
5u8: Alpha                              # Alpha Gradient, 1 dim. (until NAN)
6u8: Normal2D                           # 2D Normal (until NAN)
7u8: Normal3D                           # 3D Normal (until NAN)
8u8: Normal4D                           # 4D Normal (until NAN)
9u8: StrokeWidth                        # Width of Stroke
16u8: UserDefined(Nu8)                  # Attr. N dimensions (until [NAN])

# Group (paths)
PATH: [PathOp]                          # List PathOps

# PathOp
0u8: End                                # End list of PathOps
1u8: Close                              # Close PathOp
2u8: Move(u32)                          # Move PathOp (Attribute Indices)
3u8: Line(u32)                          # Line PathOp (Attribute Indices)
4u8: Quad(u32, u32)                     # Quad PathOp (Attribute Indices)
5u8: Cubic(u32, u32, u32)               # Cubic PathOp (Attribute Indices)

# Graphic (Also "Model")
WIDTH: f32
HEIGHT: f32
GROUPS: [(u32, [GroupProperties])]        # Group ID & Property list (MAX to end).
FRAMES: [Frame]

# GroupProperties
0u8: End
1u8: FillColorRgba(u8x4)
2u8: StrokeColorRgba(u8x4)
3u8: StrokeWidth(f32)
4u8: JoinStyle(u8)
5u8: FillRule(u8)
6u8: GlyphID(u32)
7u8: BitmapPattern(u32)
8u8: GroupPattern(u32)

# Frame
TRANSFORMS: [Transform]                 # One Transform For Each Group
DELAY: u16                              # Millis til next frame, 0 for nonlinear
ANIMATION: Animation                    # Animation Style

# Transform
OPS: [TransformOp]                      # List of Transform Operations

# TransformOp
0u8: End
1u8: Translate(x: f32, y: f32, z: f32)
2u8: Scale(x: f32, y: f32, z: f32)
3u8: Rotate(vx: f32, vy: f32, vz: f32, rot: f32)

# Animation
0u8: End
1u8: Jump - no animation
2u8: Linear (constant speed)
3u8: Faster at beginning and end of animation(amount_faster: f32)
4u8: Slower at beginning and end of animation(amount_faster: f32)
5u8: Fade
6u8: SrcOver each frame without clearing

# Bitmap
WIDTH: u16
HEIGHT: u16
SRGBA: [u8]
```