Mango Surface Format (v1.5)
Header
Field Name | Byte Length | Description |
---|---|---|
Magic Cookie | 5 | String: "mango" |
Byte Order | 1 | Character: 'l' or 'b' |
Version | 2 | String: e.g., "15" = v1.5 |
Preview Image Size | 4 | Unsigned 32-bit Integer (x 1) |
Number of Surfaces | 4 | Unsigned 32-bit Integer (x 1) |
ModelView Matrix | 128 | 64-bit Float (x 16) |
Image Dimensions (X, Y, Z) | 12 | Unsigned 32-bit Integer (x 3) |
Voxel Dimensions (X, Y, Z) | 12 | 32-bit Float (x 3) |
Origin (X, Y, Z) | 12 | 32-bit Float (x 3) |
Build Threshold | 4 | 32-bit Float (x 1) |
Preview Image | Preview Image Size | Byte Array (JPEG data) |
Loop for each surface (1 or more):
See "Number of Surfaces" for loop iteration count.
Field Name | Byte Length | Description |
---|---|---|
Surface Name | 64 | String (64 bytes) |
Base Color (R, G, B) | 12 | 32-bit Float (x 3) |
Number of Parts | 4 | Unsigned 32-bit Integer (x 1) [deprecated] |
Number of Point Values | 4 | Unsigned 32-bit Integer (x 1) |
Point Data | Number of Point Values x 4 | 32-bit Float (x Number of Point Values) |
Number of Parts | 4 | Unsigned 32-bit Integer (x 1) [deprecated] |
Number of Normal Values | 4 | Unsigned 32-bit Integer (x 1) |
Normals Data | Number of Normal Values x 4 | 32-bit Float (x Number of Normal Values) |
Number of Parts | 4 | Unsigned 32-bit Integer (x 1) [deprecated] |
Number of Index Values | 4 | Unsigned 32-bit Integer (x 1) |
Index Data | Number of Index Values x 4 | Unsigned 32-bit Integer (x Number of Index Values) |
Loop for each surface color overlay (0 or more):
Check if magic cookie exists and loop if so.
Field Name | Byte Length | Description |
---|---|---|
Magic Cookie 1 | 4 | Bytes: [0, 0, 0, 0] |
Magic Cookie 2 | 4 | String: "scal" |
Overlay Name | 64 | String (64 bytes) |
Color Lookup Table Name | 64 | String (64 bytes) |
Overlay Alpha | 4 | Unsigned 32-bit Integer (x 1) |
Overlay Display Min | 4 | 32-bit Float (x 1) |
Overlay Display Max | 4 | 32-bit Float (x 1) |
Brightness | 4 | 32-bit Float (x 1) [deprecated] |
Number of Parts | 4 | Unsigned 32-bit Integer (x 1) [deprecated] |
Number of Scalar Values | 4 | Unsigned 32-bit Integer (x 1) |
Scalar Data | Number of Scalar Values x 4 | 32-bit Float (x Number of Scalar Values) |
Loop for each vector shape (0 or more):
Check if magic cookie exists and loop if so.
Field Name | Byte Length | Description |
---|---|---|
Magic Cookie 1 | 4 | Bytes: [-1, 0, 0, 0] or [-2, 0, 0, 0] |
Magic Cookie 2 | 4 | String: "shap" |
Shape Name | 64 | String (64 bytes) |
Color (R, G, B) | 12 | 32-bit Float (x 3) |
Number of Points | 4 | Unsigned 32-bit Integer (x 1) |
Point Data | Number of Points x 4 | 32-bit Float (x Number of Points) |
Notes:
RGB data can be derived from the scalar data (1 value per vertex) and a lookup table. The "Overlay Display Min" and "Overlay Display Max" values indicate the bounds of the color table. Where the scalar data is less than or equal to "Overlay Display Min" substitute the surface's "Base Color".
See this open source Mango Surface Format reader in the Papaya project as an example.