X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=world_sfd.h;h=05f191d1d9b9cae9cb9b4aff1b0439cca68c6e4d;hb=c2d67378dd5c82de50b8fbbbe222ec6be2da4eee;hp=c6fa66b0fdb49942485fb85c8fb3ab022fc22132;hpb=1740c935bfdacc65c5c7e4bb95fba1ada1f7118a;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/world_sfd.h b/world_sfd.h index c6fa66b..05f191d 100644 --- a/world_sfd.h +++ b/world_sfd.h @@ -153,8 +153,11 @@ static int world_sfd_test( int argc, const char *argv[] ) return 0; } -static void world_sfd_init(void) +static int world_sfd_init(void) { + vg_info( "world_sfd_init\n" ); + shader_scoretext_register(); + struct subworld_sfd *sfd = &world.sfd; vg_function_push( (struct vg_cmd){ @@ -163,15 +166,12 @@ static void world_sfd_init(void) }); mdl_header *mboard = mdl_load( "models/rs_scoretext.mdl" ); - scene_init( &sfd->mesh ); - mdl_node *pn_card = mdl_node_from_name( mboard, "score_card" ); - mdl_submesh *card = mdl_submesh_from_id( mboard, pn_card->submesh_start ); - mdl_node *pn_backer = mdl_node_from_name( mboard, "backer" ); mdl_submesh *backer = mdl_submesh_from_id( mboard, pn_backer->submesh_start); - mdl_unpack_submesh( mboard, &sfd->temp, backer ); + mdl_node *pn_card = mdl_node_from_name( mboard, "score_card" ); + mdl_submesh *card = mdl_submesh_from_id( mboard, pn_card->submesh_start ); m4x3f identity; m4x3_identity( identity ); @@ -192,22 +192,39 @@ static void world_sfd_init(void) } } - scene_upload( &sfd->mesh ); - scene_free_offline_buffers( &sfd->mesh ); + if( vg_acquire_thread_sync(1) ) + { + vg_tex2d_init( (vg_tex2d *[]){ &tex_scoretext }, 1 ); + if( !scene_upload( &sfd->mesh ) ) + { + vg_release_thread_sync(1); + return 0; + } - free( mboard ); - vg_tex2d_init( (vg_tex2d *[]){ &tex_scoretext }, 1 ); + if( !mdl_unpack_submesh( mboard, &sfd->temp, backer ) ) + { + vg_release_thread_sync(1); + return 0; + } + + vg_release_thread_sync(1); + } + else + { + free( mboard ); + return 0; + } + scene_free_offline_buffers( &sfd->mesh ); sfd_new( &sfd->tester, 27, 13 ); + free( mboard ); + return 1; } -static void world_sfd_register(void) -{ - shader_scoretext_register(); -} -static void world_sfd_free(void) +static void world_sfd_free(void *_) { + mesh_free( &world.sfd.mesh.mesh ); vg_tex2d_free( (vg_tex2d *[]){ &tex_scoretext }, 1 ); }