X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_render.c;fp=player_render.c;h=a03902297c30b9442332f53adfde92624c36d6bd;hb=02e009ae6e20938675277e9ce2f467e17b170cc7;hp=17eb34200aa3453053152b77587334e21de29091;hpb=cbeec2e44e93ab43ccde54c2dd9cd02f559ebef8;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_render.c b/player_render.c index 17eb342..a039022 100644 --- a/player_render.c +++ b/player_render.c @@ -57,6 +57,11 @@ VG_STATIC void dynamic_model_load( mdl_context *ctx, 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 ){ @@ -112,12 +117,23 @@ VG_STATIC void player_board_load( struct player_board *board, 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 ); } @@ -153,7 +169,7 @@ VG_STATIC void player__pre_render( player_instance *player ) 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; @@ -438,12 +454,14 @@ PLAYER_API void player__render( camera *cam, player_instance *player ) 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],