fix fixup table
authorhgn <hgodden00@gmail.com>
Tue, 25 Feb 2025 16:54:30 +0000 (16:54 +0000)
committerhgn <hgodden00@gmail.com>
Tue, 25 Feb 2025 16:54:30 +0000 (16:54 +0000)
src/control_overlay.c
src/metascene.c
src/model.c
src/model.h
src/player_glide.c
src/player_render.c

index dcc5b3916f101f63559d2f201dea41bc3dce2da4..994d3641a7402a325864173acb85f7b3a29d6ad0 100644 (file)
@@ -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();
index 0680eb529ad3b5f3130536bd48f9c83d3da3a73a..a9e51eb30086a296c89691b53b74248469e97b6e 100644 (file)
@@ -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;
index e60d07b52e1021a671bbbbbfccbccd2ec3d3edec..ebe4e04e8e51071cb4edd7ea2e25a36b837af2cd 100644 (file)
@@ -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; i<mdl->texture_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 );
    }
 }
 
index e80423da84cfc1d0512b1c43d6ecb2e6b0056b55..690bb901184dd8f9b98723ce9e304837abd8f2ed 100644 (file)
@@ -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 */
index e97ed31be7e87926e6034366afbd99eeb352dc01..a108f33646b0fece6848fe8e08cc0881e9d88847 100644 (file)
@@ -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;
index 36f8c65da7263a326d4f27047db7467baf0cace0..01350be8fba6a4851c2ba709fb2c6ff2561ed5cf 100644 (file)
@@ -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; j<armature->bone_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 );
 }