mdl_async_load_glmesh( ctx, &mdl->mesh );
}
+VG_STATIC void dynamic_model_unload( struct dynamic_model_1texture *mdl ){
+ mesh_free( &mdl->mesh );
+ glDeleteTextures( 1, &mdl->texture );
+}
+
/* TODO: allow error handling */
VG_STATIC void player_board_load( struct player_board *board,
const char *path ){
mdl_close( &ctx );
}
-VG_STATIC void dynamic_model_unload( struct dynamic_model_1texture *mdl ){
- mesh_free( &mdl->mesh );
- glDeleteTextures( 1, &mdl->texture );
+VG_STATIC void player_board_unload( struct player_board *board ){
+ dynamic_model_unload( &board->mdl );
}
-VG_STATIC void player_board_unload( struct player_board *board ){
+VG_STATIC void player_model_load( struct player_model *board, const char *path){
+ vg_linear_clear( vg_mem.scratch );
+
+ mdl_context ctx;
+ mdl_open( &ctx, path, vg_mem.scratch );
+ mdl_load_metadata_block( &ctx, vg_mem.scratch );
+
+ dynamic_model_load( &ctx, &board->mdl, path );
+
+ mdl_close( &ctx );
+}
+
+VG_STATIC void player_model_unload( struct player_model *board ){
dynamic_model_unload( &board->mdl );
}
struct player_avatar *av = player->playeravatar;
struct player_board *board =
- addon_cache_item_if_loaded( k_workshop_file_type_board,
+ addon_cache_item_if_loaded( k_addon_type_board,
player->board_view_slot );
v3f vp0, vp1;
SDL_AtomicLock( &addon_system.sl_cache_using_resources );
struct player_model *model =
- addon_cache_item_if_loaded( k_workshop_file_type_player,
+ addon_cache_item_if_loaded( k_addon_type_player,
player->playermodel_view_slot );
+
+ if( !model ) model = &player->fallback_model;
render_playermodel( cam, world, model, &player->playeravatar->sk );
struct player_board *board =
- addon_cache_item_if_loaded( k_workshop_file_type_board,
+ addon_cache_item_if_loaded( k_addon_type_board,
player->board_view_slot );
render_board( cam, world, board, player->playeravatar->sk.final_mtx[
player->playeravatar->id_board],