599 lines
23 KiB
C
599 lines
23 KiB
C
/*
|
|
* Copyright (c) 1993-1995 by Argonaut Technologies Limited. All rights reserved.
|
|
*
|
|
* $Id: load3ds.h 2.3 1996/10/03 11:44:45 sam Exp $
|
|
* $Locker: $
|
|
*
|
|
* Definitions for 3D-Studio .3DS format loader
|
|
*/
|
|
#ifndef _LOAD3DS_H_
|
|
#define _LOAD3DS_H_
|
|
|
|
/*
|
|
* Compile-time options
|
|
*/
|
|
#define USE_MATERIAL_OPACITY (FALSE)
|
|
#define USE_BR_MATF_TWO_SIDED (TRUE)
|
|
#define USE_BR_MATF_DECAL (TRUE)
|
|
#define USE_BR_MATF_PERSPECTIVE (TRUE)
|
|
|
|
#define TEST_WIREFRAME (FALSE)
|
|
#define REGISTRY_ADD (FALSE)
|
|
#define REPORT_MESSAGES (TRUE)
|
|
#define SHOW_KEYFRAME_DATA (FALSE)
|
|
|
|
/*
|
|
* Grey-scale conversion factors
|
|
*/
|
|
#define RED_GREYSCALE_FACTOR (0.3)
|
|
#define GREEN_GREYSCALE_FACTOR (0.6)
|
|
#define BLUE_GREYSCALE_FACTOR (0.1)
|
|
|
|
/*
|
|
* Flags added to the BRender face flags to indicate texture wrapping
|
|
*/
|
|
#define FACEF_UWRAP 0x40
|
|
#define FACEF_VWRAP 0x80
|
|
|
|
/*
|
|
* Miscellaneous definitions
|
|
*/
|
|
#define FENCE (65535)
|
|
#define HALF_IMAGE_PLANE_MM (21.2237408104802371)
|
|
#define MAX_DISPLAY_DEPTH (10)
|
|
|
|
/*
|
|
* General-purpose integer type
|
|
*/
|
|
typedef br_int_32 Int_t;
|
|
|
|
/*
|
|
* Four-byte float type
|
|
*/
|
|
typedef float Float_t;
|
|
|
|
/*
|
|
* Boolean type
|
|
*/
|
|
typedef int Bool_t;
|
|
|
|
#ifdef TRUE
|
|
#undef TRUE
|
|
#endif
|
|
#define TRUE (1)
|
|
|
|
#ifdef FALSE
|
|
#undef FALSE
|
|
#endif
|
|
#define FALSE (0)
|
|
|
|
/*
|
|
* Chunk identification tags
|
|
*/
|
|
typedef enum ChunkIdTag_t {
|
|
|
|
UNIDENTIFIED = 0x0000,
|
|
|
|
COLOR_F = 0x0010,
|
|
COLOR_24 = 0x0011,
|
|
INT_PERCENTAGE = 0x0030,
|
|
FLOAT_PERCENTAGE = 0x0031,
|
|
MAT_MAPNAME = 0xA300,
|
|
|
|
M3DMAGIC = 0x4D4D,
|
|
M3D_VERSION = 0x0002,
|
|
MDATA = 0x3D3D,
|
|
MESH_VERSION = 0x3D3E,
|
|
MASTER_SCALE = 0x0100,
|
|
LO_SHADOW_BIAS = 0x1400,
|
|
HI_SHADOW_BIAS = 0x1410,
|
|
SHADOW_MAP_SIZE = 0x1420,
|
|
SHADOW_SAMPLES = 0x1430,
|
|
SHADOW_RANGE = 0x1440,
|
|
SHADOW_FILTER = 0x1450,
|
|
AMBIENT_LIGHT = 0x2100,
|
|
O_CONSTS = 0x1500,
|
|
BIT_MAP = 0x1100,
|
|
SOLID_BGND = 0x1200,
|
|
V_GRADIENT = 0x1300,
|
|
USE_BIT_MAP = 0x1101,
|
|
USE_SOLID_BGND = 0x1201,
|
|
USE_V_GRADIENT = 0x1301,
|
|
FOG = 0x2200,
|
|
FOG_BGND = 0x2210,
|
|
DISTANCE_CUE = 0x2300,
|
|
DCUE_BGND = 0x2310,
|
|
USE_FOG = 0x2201,
|
|
USE_DISTANCE_CUE = 0x2301,
|
|
DEFAULT_VIEW = 0x3000,
|
|
VIEW_TOP = 0x3010,
|
|
VIEW_BOTTOM = 0x3020,
|
|
VIEW_LEFT = 0x3030,
|
|
VIEW_RIGHT = 0x3040,
|
|
VIEW_FRONT = 0x3050,
|
|
VIEW_BACK = 0x3060,
|
|
VIEW_USER = 0x3070,
|
|
VIEW_CAMERA = 0x3080,
|
|
MAT_ENTRY = 0xAFFF,
|
|
MAT_NAME = 0xA000,
|
|
MAT_AMBIENT = 0xA010,
|
|
MAT_DIFFUSE = 0xA020,
|
|
MAT_SPECULAR = 0xA030,
|
|
MAT_SHININESS = 0xA040,
|
|
MAT_TRANSPARENCY = 0xA050,
|
|
MAT_XPFALL = 0xA052,
|
|
MAT_USE_XPFALL = 0xA240,
|
|
MAT_REFBLUR = 0xA053,
|
|
MAT_USE_REFBLUR = 0xA250,
|
|
MAT_SELF_ILLUM = 0xA080,
|
|
MAT_TWO_SIDE = 0xA081,
|
|
MAT_DECAL = 0xA082,
|
|
MAT_ADDITIVE = 0xA083,
|
|
MAT_SHADING = 0xA100,
|
|
MAT_TEXMAP = 0xA200,
|
|
MAT_SXP_TEXT_DATA = 0xA320,
|
|
MAT_OPACMAP = 0xA210,
|
|
MAT_SXP_OPAC_DATA = 0xA322,
|
|
MAT_REFLMAP = 0xA220,
|
|
MAT_ACUBIC = 0xA310,
|
|
MAT_BUMPMAP = 0xA230,
|
|
MAT_SXP_BUMP_DATA = 0xA324,
|
|
NAMED_OBJECT = 0x4000,
|
|
N_TRI_OBJECT = 0x4100,
|
|
POINT_ARRAY = 0x4110,
|
|
POINT_FLAG_ARRAY = 0x4111,
|
|
FACE_ARRAY = 0x4120,
|
|
MSH_MAT_GROUP = 0x4130,
|
|
SMOOTH_GROUP = 0x4150,
|
|
TEX_VERTS = 0x4140,
|
|
MESH_MATRIX = 0x4160,
|
|
MESH_TEXTURE_INFO = 0x4170,
|
|
PROC_NAME = 0x4181,
|
|
PROC_DATA = 0x4182,
|
|
N_DIRECT_LIGHT = 0x4600,
|
|
DL_OFF = 0x4620,
|
|
DL_SPOTLIGHT = 0x4610,
|
|
DL_SHADOWED = 0x4630,
|
|
DL_LOCAL_SHADOW2 = 0x4641,
|
|
DL_SEE_CONE = 0x4650,
|
|
N_CAMERA = 0x4700,
|
|
CAM_SEE_CONE = 0x4710,
|
|
OBJ_HIDDEN = 0x4010,
|
|
OBJ_VIS_LOFTER = 0x4011,
|
|
OBJ_DOESNT_CAST = 0x4012,
|
|
OBJ_MATTE = 0x4013,
|
|
OBJ_FAST = 0x4014,
|
|
OBJ_PROCEDURAL = 0x4015,
|
|
OBJ_FROZEN = 0x4016,
|
|
KFDATA = 0xB000,
|
|
KFHDR = 0xB00A,
|
|
KFSEG = 0xB008,
|
|
KFCURTIME = 0xB009,
|
|
OBJECT_NODE_TAG = 0xB002,
|
|
CAMERA_NODE_TAG = 0xB003,
|
|
TARGET_NODE_TAG = 0xB004,
|
|
LIGHT_NODE_TAG = 0xB005,
|
|
SPOTLIGHT_NODE_TAG = 0xB007,
|
|
L_TARGET_NODE_TAG = 0xB006,
|
|
NODE_HDR = 0xB010,
|
|
PIVOT = 0xB013,
|
|
INSTANCE_NAME = 0xB011,
|
|
MORPH_SMOOTH = 0xB015,
|
|
BOUNDBOX = 0xB014,
|
|
POS_TRACK_TAG = 0xB020,
|
|
COL_TRACK_TAG = 0xB025,
|
|
ROT_TRACK_TAG = 0xB021,
|
|
SCL_TRACK_TAG = 0xB022,
|
|
MORPH_TRACK_TAG = 0xB026,
|
|
FOV_TRACK_TAG = 0xB023,
|
|
ROLL_TRACK_TAG = 0xB024,
|
|
HOT_TRACK_TAG = 0xB027,
|
|
FALL_TRACK_TAG = 0xB028,
|
|
|
|
MLIBMAGIC = 0x3DAA,
|
|
|
|
} ChunkIdTag_t;
|
|
|
|
/*
|
|
* Chunk flags
|
|
*/
|
|
typedef enum ChunkFlag_t {
|
|
GOT_COLOR_F = 0x00000001, /* generic */
|
|
GOT_COLOR_24 = 0x00000002, /* generic */
|
|
GOT_INT_PERCENTAGE = 0x00000001, /* generic */
|
|
GOT_FLOAT_PERCENTAGE = 0x00000002, /* generic */
|
|
GOT_MAT_MAPNAME = 0x00000004, /* generic */
|
|
|
|
GOT_M3DMAGIC = 0x00000000, /* req, once */
|
|
GOT_M3D_VERSION = 0x00000001, /* req, once */
|
|
GOT_MDATA = 0x00000002, /* req, once */
|
|
GOT_MESH_VERSION = 0x00000001, /* req, once */
|
|
GOT_MASTER_SCALE = 0x00000002, /* req, once */
|
|
GOT_LO_SHADOW_BIAS = 0x00000004, /* opt, once */
|
|
GOT_HI_SHADOW_BIAS = 0x00000008, /* opt, once */
|
|
GOT_SHADOW_MAP_SIZE = 0x00000010, /* opt, once */
|
|
GOT_SHADOW_SAMPLES = 0x00000020, /* opt, once */
|
|
GOT_SHADOW_RANGE = 0x00000040, /* opt, once */
|
|
GOT_SHADOW_FILTER = 0x00000080, /* opt, once */
|
|
GOT_AMBIENT_LIGHT = 0x00000100, /* opt, once */
|
|
/* COLOR_<X> req, once */
|
|
GOT_O_CONSTS = 0x00000200, /* opt, once */
|
|
GOT_BIT_MAP = 0x00000400, /* opt, once */
|
|
GOT_SOLID_BGND = 0x00000800, /* opt, once */
|
|
GOT_V_GRADIENT = 0x00001000, /* opt, once */
|
|
/* COLOR_<X> req, three */
|
|
GOT_USE_BIT_MAP = 0x00002000, /* opt, once */
|
|
GOT_USE_SOLID_BGND = 0x00004000, /* opt, once */
|
|
GOT_USE_V_GRADIENT = 0x00008000, /* opt, once */
|
|
GOT_FOG = 0x00010000, /* opt, once */
|
|
/* COLOR_<X> req, once */
|
|
GOT_FOG_BGND = 0x00000000, /* opt, flag */
|
|
GOT_DISTANCE_CUE = 0x00020000, /* opt, once */
|
|
GOT_DCUE_BGND = 0x00000000, /* opt, flag */
|
|
GOT_USE_FOG = 0x00040000, /* opt, once */
|
|
GOT_USE_DISTANCE_CUE = 0x00080000, /* opt, once */
|
|
GOT_DEFAULT_VIEW = 0x00100000, /* opt, once */
|
|
GOT_VIEW_TOP = 0x00000001, /* xopt, once */
|
|
GOT_VIEW_BOTTOM = 0x00000002, /* xopt, once */
|
|
GOT_VIEW_LEFT = 0x00000004, /* xopt, once */
|
|
GOT_VIEW_RIGHT = 0x00000008, /* xopt, once */
|
|
GOT_VIEW_FRONT = 0x00000010, /* xopt, once */
|
|
GOT_VIEW_BACK = 0x00000020, /* xopt, once */
|
|
GOT_VIEW_USER = 0x00000040, /* xopt, once */
|
|
GOT_VIEW_CAMERA = 0x00000080, /* xopt, once */
|
|
GOT_MAT_ENTRY = 0x00000000, /* opt, any */
|
|
GOT_MAT_NAME = 0x00000001, /* req, once */
|
|
GOT_MAT_AMBIENT = 0x00000002, /* req, once */
|
|
/* COLOR_<X> req, once */
|
|
GOT_MAT_DIFFUSE = 0x00000004, /* req, once */
|
|
/* COLOR_<X> req, once */
|
|
GOT_MAT_SPECULAR = 0x00000008, /* req, once */
|
|
/* COLOR_<X> req, once */
|
|
GOT_MAT_SHININESS = 0x00000010, /* req, once */
|
|
/* <X>_PERCENTAGE req, once */
|
|
GOT_MAT_TRANSPARENCY = 0x00000020, /* req, once */
|
|
/* <X>_PERCENTAGE req, once */
|
|
GOT_MAT_XPFALL = 0x00000040, /* opt, once */
|
|
/* <X>_PERCENTAGE req, once */
|
|
GOT_MAT_USE_XPFALL = 0x00000080, /* opt, once */
|
|
GOT_MAT_REFBLUR = 0x00000100, /* opt, once */
|
|
/* <X>_PERCENTAGE req, once */
|
|
GOT_MAT_USE_REFBLUR = 0x00000200, /* opt, once */
|
|
GOT_MAT_SELF_ILLUM = 0x00000000, /* opt, flag */
|
|
GOT_MAT_TWO_SIDE = 0x00000400, /* opt, once */
|
|
GOT_MAT_DECAL = 0x00000800, /* opt, once */
|
|
GOT_MAT_ADDITIVE = 0x00000000, /* opt, flag */
|
|
GOT_MAT_SHADING = 0x00001000, /* req, once */
|
|
GOT_MAT_TEXMAP = 0x00002000, /* opt, once */
|
|
/* <X>_PERCENTAGE req, once */
|
|
/* MAT_MAPNAME req, once */
|
|
GOT_MAT_SXP_TEXT_DATA = 0x00004000, /* opt, once */
|
|
GOT_MAT_OPACMAP = 0x00008000, /* opt, once */
|
|
/* <X>_PERCENTAGE req, once */
|
|
/* MAT_MAPNAME req, once */
|
|
GOT_MAT_SXP_OPAC_DATA = 0x00010000, /* opt, once */
|
|
GOT_MAT_REFLMAP = 0x00020000, /* opt, once */
|
|
/* <X>_PERCENTAGE req, once */
|
|
/* MAT_MAPNAME req, once */
|
|
GOT_MAT_ACUBIC = 0x00040000, /* opt, once */
|
|
GOT_MAT_BUMPMAP = 0x00080000, /* opt, once */
|
|
/* <X>_PERCENTAGE req, once */
|
|
/* MAT_MAPNAME req, once */
|
|
GOT_MAT_SXP_BUMP_DATA = 0x00100000, /* opt, once */
|
|
GOT_NAMED_OBJECT = 0x00000000, /* opt, any */
|
|
GOT_N_TRI_OBJECT = 0x00000001, /* xopt, once */
|
|
GOT_POINT_ARRAY = 0x00000001, /* req, once */
|
|
GOT_POINT_FLAG_ARRAY = 0x00000002, /* opt, once */
|
|
GOT_FACE_ARRAY = 0x00000004, /* req, once */
|
|
GOT_MSH_MAT_GROUP = 0x00000000, /* opt, any */
|
|
GOT_SMOOTH_GROUP = 0x00000001, /* opt, once */
|
|
GOT_TEX_VERTS = 0x00000008, /* opt, once */
|
|
GOT_MESH_MATRIX = 0x00000010, /* opt, once */
|
|
GOT_MESH_TEXTURE_INFO = 0x00000020, /* opt, once */
|
|
GOT_PROC_NAME = 0x00000040, /* opt, once */
|
|
GOT_PROC_DATA = 0x00000080, /* opt, once */
|
|
GOT_N_DIRECT_LIGHT = 0x00000002, /* xopt, once */
|
|
/* COLOR_<X> req, once */
|
|
GOT_DL_OFF = 0x00000001, /* opt, once */
|
|
GOT_DL_SPOTLIGHT = 0x00000002, /* opt, once */
|
|
GOT_DL_SHADOWED = 0x00000001, /* opt, once */
|
|
GOT_DL_LOCAL_SHADOW2 = 0x00000002, /* opt, once */
|
|
GOT_DL_SEE_CONE = 0x00000004, /* opt, once */
|
|
GOT_N_CAMERA = 0x00000004, /* xopt, once */
|
|
GOT_CAM_SEE_CONE = 0x00000001, /* opt, once */
|
|
GOT_OBJ_HIDDEN = 0x00000002, /* opt, once */
|
|
GOT_OBJ_VIS_LOFTER = 0x00000004, /* opt, once */
|
|
GOT_OBJ_DOESNT_CAST = 0x00000008, /* opt, once */
|
|
GOT_OBJ_MATTE = 0x00000010, /* opt, once */
|
|
GOT_OBJ_FAST = 0x00000020, /* opt, once */
|
|
GOT_OBJ_PROCEDURAL = 0x00000040, /* opt, once */
|
|
GOT_OBJ_FROZEN = 0x00000080, /* opt, once */
|
|
GOT_KFDATA = 0x00000004, /* opt, once */
|
|
GOT_KFHDR = 0x00000001, /* req, once */
|
|
GOT_KFSEG = 0x00000002, /* req, once */
|
|
GOT_KFCURTIME = 0x00000004, /* req, once */
|
|
GOT_OBJECT_NODE_TAG = 0x00000000, /* opt, any */
|
|
GOT_CAMERA_NODE_TAG = 0x00000000, /* opt, any */
|
|
GOT_TARGET_NODE_TAG = 0x00000000, /* opt, any */
|
|
GOT_LIGHT_NODE_TAG = 0x00000000, /* opt, any */
|
|
GOT_SPOTLIGHT_NODE_TAG = 0x00000000, /* opt, any */
|
|
GOT_L_TARGET_NODE_TAG = 0x00000000, /* opt, any */
|
|
GOT_NODE_HDR = 0x00000001, /* req, once */
|
|
GOT_PIVOT = 0x00000002, /* req, once */
|
|
GOT_INSTANCE_NAME = 0x00000004, /* opt, once */
|
|
GOT_MORPH_SMOOTH = 0x00000008, /* opt, once */
|
|
GOT_BOUNDBOX = 0x00000010, /* req, once */
|
|
GOT_POS_TRACK_TAG = 0x00000020, /* req, once */
|
|
GOT_COL_TRACK_TAG = 0x00000040, /* req, once */
|
|
GOT_ROT_TRACK_TAG = 0x00000080, /* req, once */
|
|
GOT_SCL_TRACK_TAG = 0x00000100, /* req, once */
|
|
GOT_MORPH_TRACK_TAG = 0x00000200, /* opt, once */
|
|
GOT_FOV_TRACK_TAG = 0x00000400, /* req, once */
|
|
GOT_ROLL_TRACK_TAG = 0x00000800, /* req, once */
|
|
GOT_HOT_TRACK_TAG = 0x00001000, /* req, once */
|
|
GOT_FALL_TRACK_TAG = 0x00002000 /* req, once */
|
|
|
|
} ChunkFlag_t;
|
|
|
|
/*
|
|
* RGB triple
|
|
*/
|
|
typedef struct Color_t {
|
|
Float_t red;
|
|
Float_t green;
|
|
Float_t blue;
|
|
} Color_t;
|
|
|
|
/*
|
|
* 3DS material shading types
|
|
*/
|
|
typedef enum MatShading_t {
|
|
WIREFRAME,
|
|
FLAT,
|
|
GOURAUD
|
|
} MatShading_t;
|
|
|
|
/*
|
|
* An entry in a linked list of pixmaps
|
|
*/
|
|
typedef struct PixmapList_t {
|
|
br_pixelmap *pixelmap;
|
|
struct PixmapList_t *next;
|
|
} PixmapList_t;
|
|
|
|
/*
|
|
* A pixmap reference
|
|
*/
|
|
typedef struct PixmapRef_t {
|
|
Bool_t is_reflection_map;
|
|
char *mat_mapname;
|
|
Float_t strength;
|
|
} PixmapRef_t;
|
|
|
|
/*
|
|
* A 3DS material entry
|
|
*/
|
|
typedef struct MatEntry_t {
|
|
char *mat_name;
|
|
Color_t mat_ambient;
|
|
Color_t mat_diffuse;
|
|
Color_t mat_specular;
|
|
Float_t mat_transparency;
|
|
Float_t mat_shininess;
|
|
MatShading_t mat_shading;
|
|
Bool_t mat_two_side;
|
|
Bool_t mat_decal;
|
|
PixmapRef_t pixmap_ref;
|
|
} MatEntry_t;
|
|
|
|
/*
|
|
* An entry in a linked list of 3DS materials
|
|
*/
|
|
typedef struct MaterialList_t {
|
|
MatShading_t mat_shading;
|
|
br_material *material;
|
|
struct MaterialList_t *next;
|
|
} MaterialList_t;
|
|
|
|
/*
|
|
* An array of points
|
|
*/
|
|
typedef struct PointArray_t {
|
|
br_uint_16 n_vertices;
|
|
br_vector3 *vertices;
|
|
} PointArray_t;
|
|
|
|
/*
|
|
* Intermediate face structure
|
|
*/
|
|
typedef struct Face_t {
|
|
br_uint_16 vertices[3];
|
|
br_uint_16 flags;
|
|
} Face_t;
|
|
|
|
/*
|
|
* An entry in a linked list of material groups
|
|
*/
|
|
typedef struct MshMatGroup_t {
|
|
MaterialList_t *material_link;
|
|
br_uint_16 n_indexes;
|
|
br_uint_16 *indexes;
|
|
struct MshMatGroup_t *next;
|
|
} MshMatGroup_t;
|
|
|
|
/*
|
|
* An array of faces, material groups and smoothing groups
|
|
*/
|
|
typedef struct FaceArray_t {
|
|
br_uint_16 n_faces;
|
|
Face_t *faces;
|
|
MshMatGroup_t *msh_mat_groups;
|
|
br_uint_16 *smooth_group;
|
|
} FaceArray_t;
|
|
|
|
/*
|
|
* An array of texture coordinates
|
|
*/
|
|
typedef struct TexVerts_t {
|
|
br_uint_16 n_texverts;
|
|
br_vector2 *texverts;
|
|
} TexVerts_t;
|
|
|
|
/*
|
|
* An intermediate triangle mesh structure
|
|
*/
|
|
typedef struct NTriObj_t {
|
|
PointArray_t point_array;
|
|
FaceArray_t face_array;
|
|
TexVerts_t tex_verts;
|
|
br_matrix34 mesh_matrix;
|
|
} NTriObj_t;
|
|
|
|
/*
|
|
* Spotlight parameters
|
|
*/
|
|
typedef struct DlSpotlight_t {
|
|
br_vector3 target;
|
|
Float_t cone_inner;
|
|
Float_t cone_outer;
|
|
} DlSpotlight_t;
|
|
|
|
/*
|
|
* Light parameters
|
|
*/
|
|
typedef struct NDLight_t {
|
|
br_vector3 posn;
|
|
Color_t color;
|
|
Bool_t is_off;
|
|
Bool_t is_spotlight;
|
|
DlSpotlight_t dl_spotlight;
|
|
} NDLight_t;
|
|
|
|
/*
|
|
* Camera parameters
|
|
*/
|
|
typedef struct NCamera_t {
|
|
br_vector3 posn;
|
|
br_vector3 target;
|
|
Float_t bank_angle;
|
|
Float_t focal_length;
|
|
} NCamera_t;
|
|
|
|
/*
|
|
* Light
|
|
*/
|
|
typedef struct Light_t {
|
|
br_uint_8 type;
|
|
br_colour colour;
|
|
br_angle cone_outer;
|
|
br_angle cone_inner;
|
|
Bool_t is_off;
|
|
} Light_t;
|
|
|
|
/*
|
|
* Camera
|
|
*/
|
|
typedef struct Camera_t {
|
|
br_angle field_of_view;
|
|
} Camera_t;
|
|
|
|
/*
|
|
* Model
|
|
*/
|
|
typedef struct Model_t {
|
|
br_model *fill_model;
|
|
br_model *wire_model;
|
|
} Model_t;
|
|
|
|
/*
|
|
* 3DS named object types
|
|
*/
|
|
typedef enum NamedObjType_t {
|
|
NONE,
|
|
LIGHT,
|
|
CAMERA,
|
|
MODEL
|
|
} NamedObjType_t;
|
|
|
|
/*
|
|
* An entry in a linked list of named objects
|
|
*/
|
|
typedef struct NamedObj_t {
|
|
char *name;
|
|
NamedObjType_t type;
|
|
union {
|
|
Light_t *light;
|
|
Model_t *model;
|
|
Camera_t *camera;
|
|
} data;
|
|
br_matrix34 to_world;
|
|
br_matrix34 from_world;
|
|
struct NamedObj_t *next;
|
|
} NamedObj_t;
|
|
|
|
/*
|
|
* Node header
|
|
*/
|
|
typedef struct NodeHdr_t {
|
|
Int_t index;
|
|
Int_t parent;
|
|
NamedObj_t *named_obj;
|
|
} NodeHdr_t;
|
|
|
|
/*
|
|
* An entry in a linked list of node tags, each
|
|
* of which contain additional model information
|
|
*/
|
|
typedef struct NodeTag_t {
|
|
NodeHdr_t node_hdr;
|
|
char *instance_name;
|
|
Bool_t has_pivot;
|
|
br_vector3 pivot;
|
|
Bool_t has_boundbox;
|
|
br_bounds boundbox;
|
|
struct NodeTag_t *next;
|
|
} NodeTag_t;
|
|
|
|
/*
|
|
* An item on the stack
|
|
*/
|
|
typedef struct Stack_t {
|
|
ChunkIdTag_t id_tag;
|
|
br_uint_32 length;
|
|
br_uint_32 done;
|
|
ChunkFlag_t flags;
|
|
union { Color_t color;
|
|
Float_t percent;
|
|
char *string;
|
|
MatShading_t mat_shading;
|
|
PixmapRef_t pixmap_ref;
|
|
MatEntry_t mat_entry;
|
|
PointArray_t point_array;
|
|
FaceArray_t face_array;
|
|
br_uint_16 *smooth_group;
|
|
MshMatGroup_t *msh_mat_group;
|
|
TexVerts_t tex_verts;
|
|
br_matrix34 mesh_matrix;
|
|
NTriObj_t n_tri_obj;
|
|
DlSpotlight_t dl_spotlight;
|
|
NDLight_t n_d_light;
|
|
NCamera_t n_camera;
|
|
NamedObj_t *named_obj;
|
|
NodeHdr_t node_hdr;
|
|
br_vector3 pivot;
|
|
br_bounds boundbox;
|
|
NodeTag_t *node_tag;
|
|
} data;
|
|
} Stack_t;
|
|
|
|
/*
|
|
* Parser states
|
|
*/
|
|
typedef enum State_t {
|
|
OK,
|
|
PARSE_ERROR,
|
|
OUT_OF_MEMORY
|
|
} State_t;
|
|
|
|
#endif
|
|
|