dreamcast/mdxm/mdxm.h
2025-04-29 23:04:32 -05:00

89 lines
1.7 KiB
C

#ifdef __cplusplus
extern "C" {
#endif
#define MDX_IDENT (('M'<<24)+('G'<<16)+('L'<<8)+'2')
#define MAX_QPATH 64
// mdxm = mod->mdxm = (mdxmHeader_t*)
typedef struct mdxm_header {
union {
int ident;
uint8_t magic[4];
};
int version;
char name[MAX_QPATH];
char anim_name[MAX_QPATH];
int anim_index;
int num_bones;
int num_lods;
int offset_lods;
int num_surfaces;
int offset_surface_hierarchy;
int offset_end;
} mdxm_header_t;
// lod = (mdxmLOD_t *) ( (byte *)mdxm + mdxm->ofsLODs );
typedef struct mdxm_lod {
int offset_end;
} mdxm_lod_t;
typedef struct mdxm_lod_surf_offset {
int offsets[1];
} mdxm_lod_surf_offset_t;
typedef struct {
char name[MAX_QPATH];
uint32_t flags;
char shader[MAX_QPATH];
int shader_index;
int parent_index;
int num_children;
int child_indexes[1];
} mdxm_surf_hierarchy_t;
// surf = (mdxmSurface_t *) ( (byte *)lod + sizeof (mdxmLOD_t) + (mdxm->numSurfaces * sizeof(mdxmLODSurfOffset_t)) );
typedef struct mdxm_surface {
int ident;
int this_surface_index;
int offset_header;
int num_verts;
int offset_verts;
int num_triangles;
int offset_triangles;
int num_bone_references;
int offset_bone_references;
int offset_end;
} mdxm_surface_t;
/*
v = (mdxmVertex_t *) ((byte *)surface + surface->offset_verts);
pTexCoords = (mdxmVertexTexCoord_t *) &v[numVerts];
*/
typedef struct mdxm_triangle {
int index[3];
} mdxm_triangle_t;
typedef float mdxm_vec2_t[2];
typedef float mdxm_vec3_t[3];
typedef struct mdxm_vertex {
mdxm_vec3_t normal;
mdxm_vec3_t position;
uint32_t flags;
uint8_t bone_weightings[4];
} mdxm_vertex_t;
typedef struct mdxm_vertex_texture_coord {
mdxm_vec2_t texture;
} mdxm_vertex_texture_coord_t;
#ifdef __cplusplus
}
#endif