From: hgn Date: Tue, 25 Feb 2025 16:54:30 +0000 (+0000) Subject: fix fixup table X-Git-Url: https://harrygodden.com/git/?a=commitdiff_plain;h=f6fa1692c1175f35ab9713bfd3956559db989763;p=carveJwlIkooP6JGAAIwe30JlM.git fix fixup table --- diff --git a/src/control_overlay.c b/src/control_overlay.c index dcc5b39..994d364 100644 --- a/src/control_overlay.c +++ b/src/control_overlay.c @@ -23,7 +23,7 @@ void control_overlay_init(void) mdl_open( mdl, "models/rs_overlay.mdl", alloc ); mdl_load_metadata_block( mdl, alloc ); - mdl_async_full_load_std( mdl ); + mdl_async_full_load_std( mdl, NULL ); mdl_close( mdl ); vg_async_stall(); diff --git a/src/metascene.c b/src/metascene.c index 0680eb5..a9e51eb 100644 --- a/src/metascene.c +++ b/src/metascene.c @@ -251,7 +251,7 @@ static void cutscene_load_thread( void *data ) vg_info( "Loading instance model: %s\n", mdl_path.buffer ); mdl_open( &ref->mdl, mdl_path.buffer, _cutscene.arena ); mdl_load_metadata_block( &ref->mdl, _cutscene.arena ); - mdl_async_full_load_std( &ref->mdl ); + mdl_async_full_load_std( &ref->mdl, NULL ); mdl_close( &ref->mdl ); u32 skeleton_count = ref->mdl.armature_count; diff --git a/src/model.c b/src/model.c index e60d07b..ebe4e04 100644 --- a/src/model.c +++ b/src/model.c @@ -496,9 +496,9 @@ void mdl_async_load_glmesh( mdl_context *mdl, glmesh *mesh, u32 *fixup_table ) } /* uploads the glmesh, and textures. everything is saved into the mdl_context */ -void mdl_async_full_load_std( mdl_context *mdl ) +void mdl_async_full_load_std( mdl_context *mdl, u32 *fixup_table ) { - mdl_async_load_glmesh( mdl, &mdl->mesh, NULL ); + mdl_async_load_glmesh( mdl, &mdl->mesh, fixup_table ); for( u32 i=0; itexture_count; i ++ ) { @@ -508,8 +508,7 @@ void mdl_async_full_load_std( mdl_context *mdl ) void *data = vg_linear_alloc( vg_mem.scratch, tex->file.pack_size ); mdl_fread_pack_file( mdl, &tex->file, data ); - vg_tex2d_load_qoi_async( data, tex->file.pack_size, - VG_TEX2D_CLAMP|VG_TEX2D_NEAREST, &tex->glname ); + vg_tex2d_load_qoi_async( data, tex->file.pack_size, VG_TEX2D_CLAMP|VG_TEX2D_NEAREST, &tex->glname ); } } diff --git a/src/model.h b/src/model.h index e80423d..690bb90 100644 --- a/src/model.h +++ b/src/model.h @@ -304,7 +304,7 @@ void mdl_load_materials( mdl_context *mdl, void *lin_alloc ); 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 ); +void mdl_async_full_load_std( mdl_context *mdl, u32 *fixup_table ); void mdl_sync_std_unload( mdl_context *mdl ); /* rendering */ diff --git a/src/player_glide.c b/src/player_glide.c index e97ed31..a108f33 100644 --- a/src/player_glide.c +++ b/src/player_glide.c @@ -456,7 +456,7 @@ void player_glide_bind(void) mdl_open( mdl, "models/glider.mdl", alloc ); mdl_load_metadata_block( mdl, alloc ); - mdl_async_full_load_std( mdl ); + mdl_async_full_load_std( mdl, NULL ); /* load trail positions */ array_file_ptr markers; diff --git a/src/player_render.c b/src/player_render.c index 36f8c65..01350be 100644 --- a/src/player_render.c +++ b/src/player_render.c @@ -120,7 +120,7 @@ void player_board_load( player_board *board, const char *path, void *arena ) { mdl_open( &board->mdl, path, arena ); mdl_load_metadata_block( &board->mdl, arena ); - mdl_async_full_load_std( &board->mdl ); + mdl_async_full_load_std( &board->mdl, NULL ); array_file_ptr markers; AF_LOAD_ARRAY_STRUCT( &board->mdl.af, &markers, ent_marker, vg_mem.scratch ); @@ -176,7 +176,6 @@ void player_model_load( player_model *pm, const char *path, void *arena ) { mdl_open( &pm->mdl, path, arena ); mdl_load_metadata_block( &pm->mdl, arena ); - mdl_async_full_load_std( &pm->mdl ); VG_ASSERT( pm->mdl.armature_count ); mdl_armature *armature = &pm->mdl.armatures[ 0 ]; @@ -190,6 +189,8 @@ void player_model_load( player_model *pm, const char *path, void *arena ) struct skeleton_bone *sb = &localplayer.skeleton.bones[i]; u32 hash = vg_strdjb2( sb->name ); + bool found = 0; + for( u32 j=1; jbone_count; j ++ ) { mdl_bone *bone = &pm->mdl.bones[ armature->bone_start+j ]; @@ -197,11 +198,16 @@ void player_model_load( player_model *pm, const char *path, void *arena ) if( af_str_eq( &pm->mdl.af, bone->pstr_name, sb->name, hash ) ) { fixup_table[j+1] = i; + found = 1; break; } } + + if( !found ) + vg_low( "Reference skeleton has a bone called '%s', retargetee has no such bone..\n", sb->name ); } + mdl_async_full_load_std( &pm->mdl, fixup_table ); mdl_close( &pm->mdl ); }