X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=model.h;h=aade46aa21ddd00c341c552d71669bc20f1fbd00;hb=refs%2Fheads%2Fmaster;hp=a5254c2103b03212438d14256f8a770c75064de7;hpb=ad9ece78cdcf550c34d28af276567d7d18b67668;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/model.h b/model.h deleted file mode 100644 index a5254c2..0000000 --- a/model.h +++ /dev/null @@ -1,321 +0,0 @@ -/* - * Copyright (C) 2021-2024 Mt.ZERO Software, Harry Godden - All Rights Reserved - */ - -#pragma once - -#define MDL_VERSION_MIN 101 -#define MDL_VERSION_NR 105 - -enum mdl_shader{ - k_shader_standard = 0, - k_shader_standard_cutout = 1, - k_shader_terrain_blend = 2, - k_shader_standard_vertex_blend = 3, - k_shader_water = 4, - k_shader_invisible = 5, - k_shader_boundary = 6, - k_shader_fxglow = 7, - k_shader_cubemap = 8, - k_shader_walking = 9, - k_shader_foliage = 10, - k_shader_override = 30000 -}; - -enum mdl_surface_prop{ - k_surface_prop_concrete = 0, - k_surface_prop_wood = 1, - k_surface_prop_grass = 2, - k_surface_prop_tiles = 3, - k_surface_prop_metal = 4, - k_surface_prop_snow = 5, - k_surface_prop_sand = 6 -}; - -enum material_flag{ - k_material_flag_skate_target = 0x0001, - k_material_flag_collision = 0x0002, - k_material_flag_grow_grass = 0x0004, - k_material_flag_grindable = 0x0008, - k_material_flag_invisible = 0x0010, - k_material_flag_boundary = 0x0020, - k_material_flag_preview_visibile = 0x0040, - k_material_flag_walking = 0x0080, - - k_material_flag_ghosts = - k_material_flag_boundary| - k_material_flag_invisible| - k_material_flag_walking -}; - -#pragma pack(push,1) - -/* 48 byte */ -struct mdl_vert -{ - v3f co, /* 3*32 */ - norm; /* 3*32 */ - v2f uv; /* 2*32 */ - - u8 colour[4]; /* 4*8 */ - u16 weights[4];/* 4*16 */ - u8 groups[4]; /* 4*8 */ -}; - -#pragma pack(pop) - -typedef u32 mdl_indice; - -typedef struct mdl_context mdl_context; -typedef struct mdl_array_ptr mdl_array_ptr; -typedef struct mdl_vert mdl_vert; -typedef struct mdl_transform mdl_transform; -typedef struct mdl_submesh mdl_submesh; -typedef struct mdl_material mdl_material; -typedef struct mdl_bone mdl_bone; -typedef struct mdl_armature mdl_armature; -typedef struct mdl_animation mdl_animation; -typedef struct mdl_transform mdl_keyframe; -typedef struct mdl_mesh mdl_mesh; -typedef struct mdl_file mdl_file; -typedef struct mdl_texture mdl_texture; -typedef struct mdl_array mdl_array; -typedef struct mdl_header mdl_header; - -typedef struct glmesh glmesh; -struct glmesh -{ - GLuint vao, vbo, ebo; - u32 indice_count; - u32 loaded; -}; - -struct mdl_transform -{ - v3f co, s; - v4f q; -}; - -static void transform_identity( mdl_transform *transform ) -{ - v3_zero( transform->co ); - q_identity( transform->q ); - v3_fill( transform->s, 1.0f ); -} - -static void mdl_transform_vector( mdl_transform *transform, v3f vec, v3f dest ) -{ - v3_mul( transform->s, vec, dest ); - q_mulv( transform->q, dest, dest ); -} - -static void mdl_transform_point( mdl_transform *transform, v3f co, v3f dest ) -{ - mdl_transform_vector( transform, co, dest ); - v3_add( transform->co, dest, dest ); -} - -static void mdl_transform_mul( mdl_transform *a, mdl_transform *b, - mdl_transform *d ) -{ - mdl_transform_point( a, b->co, d->co ); - q_mul( a->q, b->q, d->q ); - q_normalize( d->q ); - v3_mul( a->s, b->s, d->s ); -} - -struct mdl_material -{ - u32 pstr_name, - shader, - flags, - surface_prop; - - v4f colour, - colour1; - - u32 tex_diffuse, /* Indexes start from 1. 0 if missing. */ - tex_none0, - tex_none1; -}; - -struct mdl_bone -{ - v3f co, end; - u32 parent, - collider, - ik_target, - ik_pole, - flags, - pstr_name; - - boxf hitbox; - v3f conevx, conevy, coneva; - float conet; -}; - -enum bone_flag -{ - k_bone_flag_deform = 0x00000001, - k_bone_flag_ik = 0x00000002, - k_bone_flag_cone_constraint = 0x00000004 -}; - -enum bone_collider -{ - k_bone_collider_none = 0, - k_bone_collider_box = 1, - k_bone_collider_capsule = 2 -}; - -struct mdl_armature -{ - mdl_transform transform; - u32 bone_start, - bone_count, - anim_start, - anim_count; -}; - -struct mdl_animation -{ - u32 pstr_name, - length; - float rate; - u32 offset; -}; - -struct mdl_submesh -{ - u32 indice_start, - indice_count, - vertex_start, - vertex_count; - - boxf bbx; - u16 material_id, flags; -}; - -enum esubmesh_flags -{ - k_submesh_flag_none = 0x0000, - k_submesh_flag_consumed = 0x0001 -}; - -struct mdl_mesh -{ - mdl_transform transform; - u32 submesh_start, - submesh_count, - pstr_name, - entity_id, /* upper 16 bits: type, lower 16 bits: index */ - armature_id; -}; - -struct mdl_file -{ - u32 pstr_path, - pack_offset, - pack_size; -}; - -struct mdl_texture -{ - mdl_file file; - u32 glname; -}; - -struct mdl_array -{ - u32 file_offset, - item_count, - item_size; - - char name[16]; -}; - -struct mdl_header -{ - u32 version; - mdl_array index; -}; - -struct mdl_context{ - FILE *file; - mdl_header info; - - struct mdl_array_ptr - { - void *data; - u32 count, stride; - } - index, - - /* metadata */ - strings, - meshs, - submeshs, - materials, - textures, - armatures, - bones, - animations, - - /* animation buffers */ - keyframes, - - /* mesh buffers */ - verts, - indices; - u32 pack_base_offset; - - /* runtime */ - glmesh mesh; -}; - -/* mesh. TODO: move? */ -void mesh_bind( glmesh *mesh ); -void mesh_drawn( u32 start, u32 count ); -void mesh_draw( glmesh *mesh ); -void mesh_free( glmesh *mesh ); - -/* file context management */ -void mdl_open( mdl_context *mdl, const char *path, void *lin_alloc ); -void mdl_close( mdl_context *mdl ); - -/* array loading */ -int _mdl_load_array( mdl_context *mdl, mdl_array_ptr *ptr, - const char *name, void *lin_alloc, u32 stride ); -#define MDL_LOAD_ARRAY( MDL, PTR, STRUCT, ALLOCATOR ) \ - _mdl_load_array( MDL, PTR, #STRUCT, ALLOCATOR, sizeof(STRUCT) ) - -/* array access */ -void *mdl_arritm( mdl_array_ptr *arr, u32 index ); -u32 mdl_arrcount( mdl_array_ptr *arr ); - -/* pack access */ -void mdl_fread_pack_file( mdl_context *mdl, mdl_file *info, void *dst ); - -/* standard array groups */ -int mdl_load_animation_block( mdl_context *mdl, void *lin_alloc ); -int mdl_load_metadata_block( mdl_context *mdl, void *lin_alloc ); -int mdl_load_mesh_block( mdl_context *mdl, void *lin_alloc ); - -/* load mesh */ -void mdl_async_load_glmesh( mdl_context *mdl, glmesh *mesh, u32 *fixup_table ); - -/* load textures and mesh */ -void mdl_async_full_load_std( mdl_context *mdl ); - -/* rendering */ -void mdl_draw_submesh( mdl_submesh *sm ); -mdl_mesh *mdl_find_mesh( mdl_context *mdl, const char *name ); - -/* pstrs */ -const char *mdl_pstr( mdl_context *mdl, u32 pstr ); -int mdl_pstreq( mdl_context *mdl, u32 pstr, const char *str, u32 djb2 ); -#define MDL_CONST_PSTREQ( MDL, Q, CONSTSTR )\ - mdl_pstreq( MDL, Q, CONSTSTR, vg_strdjb2( CONSTSTR ) ) - -void mdl_transform_m4x3( mdl_transform *transform, m4x3f mtx ); -