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();
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;
}
/* 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 ++ )
{
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 );
}
}
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 */
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;
{
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 );
{
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 ];
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 ];
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 );
}