44
55#pragma once
66
7- // Format reference: Affine Toolkit (Thomas E. Burge), riff.h and riff.c
8- // Autodesk Maya documentation, ilib.h
7+ // Maya Fileformats Version 6:
8+ // https://courses.cs.washington.edu/courses/cse458/05au/help/mayaguide/Reference/FileFormats.pdf
9+ // Format reference: Affine Toolkit (Thomas E. Burge):
10+ // riff.h and riff.c
11+ // Autodesk Maya documentation:
12+ // ilib.h
13+
914
1015#include < cstdio>
1116
@@ -36,16 +41,19 @@ const uint32_t BLACK = 0x00000010;
3641class IffFileHeader {
3742public:
3843 // header information
39- uint32_t x;
40- uint32_t y;
41- uint32_t width;
42- uint32_t height;
43- uint32_t compression;
44- uint8_t pixel_bits;
45- uint8_t pixel_channels;
46- uint16_t tiles;
47- uint16_t tile_width;
48- uint16_t tile_height;
44+ uint32_t x = 0 ;
45+ uint32_t y = 0 ;
46+ uint32_t z = 0 ;
47+ uint32_t width = 0 ;
48+ uint32_t height = 0 ;
49+ uint32_t compression = 0 ;
50+ uint8_t rgba_bits = 0 ;
51+ uint8_t rgba_count = 0 ;
52+ uint16_t tiles = 0 ;
53+ uint16_t tile_width = 0 ;
54+ uint16_t tile_height = 0 ;
55+ uint8_t zbuffer = 0 ;
56+ uint8_t zbuffer_bits = 0 ;
4957
5058 // author string
5159 std::string author;
@@ -59,14 +67,29 @@ class IffFileHeader {
5967 // for4 start
6068 uint32_t for4_start;
6169
62- private:
63- };
70+ size_t channel_bytes () const { return (rgba_bits / 8 ); }
71+
72+ size_t rgba_channels_bytes () const { return channel_bytes () * rgba_count; }
73+
74+ size_t rgba_scanline_bytes () const { return width * rgba_channels_bytes (); }
75+
76+ size_t zbuffer_bytes () const { return zbuffer ? (zbuffer_bits / 8 ) : 0 ; }
6477
78+ size_t zbuffer_scanline_bytes () const { return width * zbuffer_bytes (); }
6579
80+ size_t scanline_bytes () const { return width * pixel_bytes (); }
81+
82+ size_t pixel_bytes () const
83+ {
84+ return rgba_channels_bytes () + zbuffer_bytes ();
85+ }
86+
87+ size_t image_bytes () const { return pixel_bytes () * width * height; }
88+ };
6689
67- // align size
90+ // align chunk
6891inline uint32_t
69- align_size (uint32_t size, uint32_t alignment)
92+ align_chunk (uint32_t size, uint32_t alignment)
7093{
7194 uint32_t mod = size % alignment;
7295 if (mod) {
0 commit comments