rev |
line source |
nuclear@1
|
1 #ifndef CHUNK_H_
|
nuclear@1
|
2 #define CHUNK_H_
|
nuclear@1
|
3
|
nuclear@41
|
4 #ifndef _MSC_VER
|
nuclear@9
|
5 #include <stdint.h>
|
nuclear@41
|
6 #else
|
nuclear@41
|
7 typedef unsigned __int32 uint32_t;
|
nuclear@41
|
8 #endif
|
nuclear@9
|
9
|
nuclear@47
|
10 namespace g3dimpl {
|
nuclear@47
|
11
|
nuclear@1
|
12 enum {
|
nuclear@1
|
13 CNK_INVALID, // this shouldn't appear in files
|
nuclear@1
|
14 CNK_SCENE, // the root chunk
|
nuclear@1
|
15
|
nuclear@1
|
16 // general purpose chunks
|
nuclear@1
|
17 CNK_INT,
|
nuclear@2
|
18 CNK_INT4,
|
nuclear@1
|
19 CNK_FLOAT,
|
nuclear@2
|
20 CNK_FLOAT3,
|
nuclear@2
|
21 CNK_FLOAT4,
|
nuclear@1
|
22 CNK_STRING,
|
nuclear@1
|
23
|
nuclear@1
|
24 // --- first level chunks ---
|
nuclear@1
|
25 // children of CNK_SCENE
|
nuclear@1
|
26 CNK_ENV, // environmental parameters
|
nuclear@14
|
27 CNK_MTL, // material
|
nuclear@14
|
28 CNK_MESH,
|
nuclear@14
|
29 CNK_LIGHT,
|
nuclear@14
|
30 CNK_CAMERA,
|
nuclear@14
|
31 CNK_NODE,
|
nuclear@1
|
32
|
nuclear@1
|
33 // --- second level chunks ---
|
nuclear@1
|
34 // children of CNK_ENV
|
nuclear@2
|
35 CNK_ENV_AMBIENT, // ambient color, contains a single CNK_FLOAT3
|
nuclear@1
|
36 CNK_ENV_FOG,
|
nuclear@1
|
37
|
nuclear@1
|
38 // --- third level chunks ---
|
nuclear@1
|
39 // children of CNK_FOG
|
nuclear@2
|
40 CNK_FOG_COLOR, // fog color, contains a single CNK_FLOAT3
|
nuclear@14
|
41 CNK_FOG_EXP, // fog exponent, contains a single CNK_FLOAT
|
nuclear@1
|
42
|
nuclear@1
|
43 // children of CNK_MTL
|
nuclear@14
|
44 CNK_MTL_NAME, // has a single CNK_STRING
|
nuclear@1
|
45 CNK_MTL_ATTR, // material attribute, has a CNK_STRING for its name,
|
nuclear@1
|
46 // a CNK_MTL_ATTR_VAL, and optionally a CNK_MTL_ATTR_MAP
|
nuclear@1
|
47 // children of CNK_MTL_ATTR
|
nuclear@14
|
48 CNK_MTL_ATTR_NAME, // has a single CNK_STRING
|
nuclear@2
|
49 CNK_MTL_ATTR_VAL, // can have a single CNK_FLOAT, CNK_FLOAT3, or CNK_FLOAT4
|
nuclear@1
|
50 CNK_MTL_ATTR_MAP, // has a single CNK_STRING
|
nuclear@1
|
51
|
nuclear@1
|
52 // children of CNK_MESH
|
nuclear@2
|
53 CNK_MESH_NAME, // has a single CNK_STRING
|
nuclear@2
|
54 CNK_MESH_MATERIAL, // has one of CNK_STRING or CNK_INT to identify the material
|
nuclear@2
|
55 CNK_MESH_VERTEX_LIST, // has a series of CNK_FLOAT3 chunks
|
nuclear@2
|
56 CNK_MESH_NORMAL_LIST, // has a series of CNK_FLOAT3 chunks
|
nuclear@2
|
57 CNK_MESH_TANGENT_LIST, // has a series of CNK_FLOAT3 chunks
|
nuclear@2
|
58 CNK_MESH_TEXCOORD_LIST, // has a series of CNK_FLOAT3 chunks
|
nuclear@2
|
59 CNK_MESH_SKINWEIGHT_LIST, // has a series of CNK_FLOAT4 chunks (4 skin weights)
|
nuclear@2
|
60 CNK_MESH_SKINMATRIX_LIST, // has a series of CNK_INT4 chunks (4 matrix indices)
|
nuclear@2
|
61 CNK_MESH_COLOR_LIST, // has a series of CNK_FLOAT4 chunks
|
nuclear@2
|
62 CNK_MESH_BONES_LIST, // has a series of CNK_INT or CNK_STRING chunks identifying the bone nodes
|
nuclear@8
|
63 CNK_MESH_FACE_LIST, // has a series of CNK_FACE chunks
|
nuclear@14
|
64 CNK_MESH_FILE, // optionally mesh data may be in another file, has a CNK_STRING filename
|
nuclear@8
|
65
|
nuclear@8
|
66 // child of CNK_MESH_FACE_LIST
|
nuclear@8
|
67 CNK_MESH_FACE, // has three CNK_INT chunks
|
nuclear@2
|
68
|
nuclear@2
|
69 // children of CNK_LIGHT
|
nuclear@2
|
70 CNK_LIGHT_NAME, // has a single CNK_STRING
|
nuclear@2
|
71 CNK_LIGHT_POS, // has a single CNK_FLOAT3
|
nuclear@2
|
72 CNK_LIGHT_COLOR, // has a single CNK_FLOAT3
|
nuclear@2
|
73 CNK_LIGHT_ATTEN, // has a single CNK_FLOAT3 (constant, linear, squared attenuation)
|
nuclear@2
|
74 CNK_LIGHT_DISTANCE, // has a single CNK_FLOAT
|
nuclear@2
|
75 CNK_LIGHT_DIR, // a single CNK_FLOAT3 (for spotlights and dir-lights)
|
nuclear@2
|
76 CNK_LIGHT_CONE_INNER, // single CNK_FLOAT, inner cone angle (for spotlights)
|
nuclear@2
|
77 CNK_LIGHT_CONE_OUTER, // single CNK_FLOAT, outer cone angle (for spotlights)
|
nuclear@2
|
78
|
nuclear@2
|
79 // children of CNK_CAMERA
|
nuclear@2
|
80 CNK_CAMERA_NAME, // has a single CNK_STRING
|
nuclear@2
|
81 CNK_CAMERA_POS, // single CNK_FLOAT3
|
nuclear@2
|
82 CNK_CAMERA_TARGET, // single CNK_FLOAT3
|
nuclear@2
|
83 CNK_CAMERA_FOV, // single CNK_FLOAT (field of view in radians)
|
nuclear@2
|
84 CNK_CAMERA_NEARCLIP, // single CNK_FLOAT (near clipping plane distance)
|
nuclear@2
|
85 CNK_CAMERA_FARCLIP, // signle CNK_FLOAT (far clipping plane distance)
|
nuclear@2
|
86
|
nuclear@2
|
87 // children of CNK_NODE
|
nuclear@2
|
88 CNK_NODE_NAME, // node name, a single CNK_STRING
|
nuclear@2
|
89 CNK_NODE_PARENT, // it can have a CNK_INT or a CNK_STRING to identify the parent node
|
nuclear@2
|
90
|
nuclear@2
|
91 CNK_NODE_MESH, // it can have a CNK_INT or a CNK_STRING to identify this node's mesh
|
nuclear@2
|
92 CNK_NODE_LIGHT, // same as CNK_NODE_MESH
|
nuclear@2
|
93 CNK_NODE_CAMERA, // same as CNK_NODE_MESH
|
nuclear@2
|
94
|
nuclear@14
|
95 CNK_NODE_POS, // has a CNK_FLOAT3, position vector
|
nuclear@14
|
96 CNK_NODE_ROT, // has a CNK_FLOAT4, rotation quaternion (x, y, z imaginary, w real)
|
nuclear@14
|
97 CNK_NODE_SCALE, // has a CNK_FLOAT3, scaling
|
nuclear@14
|
98 CNK_NODE_PIVOT, // has a CNK_FLOAT3, pivot point
|
nuclear@2
|
99
|
nuclear@14
|
100 CNK_NODE_MATRIX0, // has a CNK_FLOAT4, first matrix row (4x3)
|
nuclear@14
|
101 CNK_NODE_MATRXI1, // has a CNK_FLOAT4, second matrix row (4x3)
|
nuclear@14
|
102 CNK_NODE_MATRIX2, // has a CNK_FLOAT4, third matrix row (4x3)
|
nuclear@2
|
103
|
nuclear@2
|
104 MAX_NUM_CHUNKS
|
nuclear@1
|
105 };
|
nuclear@1
|
106
|
nuclear@9
|
107 #define UNKNOWN_SIZE ((uint32_t)0xbaadf00d)
|
nuclear@9
|
108
|
nuclear@1
|
109 struct ChunkHeader {
|
nuclear@1
|
110 uint32_t id;
|
nuclear@1
|
111 uint32_t size;
|
nuclear@1
|
112 };
|
nuclear@1
|
113
|
nuclear@1
|
114 struct Chunk {
|
nuclear@1
|
115 ChunkHeader hdr;
|
nuclear@1
|
116 char data[1];
|
nuclear@1
|
117 };
|
nuclear@1
|
118
|
nuclear@9
|
119
|
nuclear@13
|
120 ChunkHeader chunk_header(int id);
|
nuclear@13
|
121 bool write_chunk_header(const ChunkHeader *hdr, goat3d_io *io);
|
nuclear@13
|
122 bool read_chunk_header(ChunkHeader *hdr, goat3d_io *io);
|
nuclear@13
|
123 void skip_chunk(const ChunkHeader *hdr, goat3d_io *io);
|
nuclear@13
|
124
|
nuclear@47
|
125 } // namespace g3dimpl
|
nuclear@9
|
126
|
nuclear@1
|
127 #endif // CHUNK_H_
|