X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=world_gen.h;h=500592d27eec550986eaab15d2e39cfc11893149;hb=8f83be5a31728cd6bf95020e729367cc44308763;hp=63cb1ef98f1e91c38799f1f9d2e78a7a65e81b69;hpb=0a33f65eecb5e75cddaefa08d3a5eb1a301d0479;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/world_gen.h b/world_gen.h index 63cb1ef..500592d 100644 --- a/world_gen.h +++ b/world_gen.h @@ -356,7 +356,7 @@ VG_STATIC void world_compute_light_indices( world_instance *world ) int total_cubes = icubes_count[0]*icubes_count[1]*icubes_count[2]; u32 *cubes_index = vg_linear_alloc( world_global.generic_heap, - total_cubes * sizeof(u32) * 2.0f ); + vg_align8(total_cubes*sizeof(u32)*2) ); vg_info( "Computing light cubes (%d) [%f %f %f] -> [%f %f %f]\n", total_cubes, cubes_min[0], -cubes_min[2], cubes_min[1], @@ -626,7 +626,7 @@ VG_STATIC void world_process_resources( world_instance *world ) world->texture_count = world->meta.textures.count+1; world->textures = vg_linear_alloc( world_global.generic_heap, - sizeof(GLuint)*world->texture_count ); + vg_align8(sizeof(GLuint)*world->texture_count) ); vg_acquire_thread_sync(); { @@ -660,7 +660,7 @@ VG_STATIC void world_process_resources( world_instance *world ) world->surface_count = world->meta.materials.count+1; world->surfaces = vg_linear_alloc( world_global.generic_heap, - sizeof(struct world_surface)*world->surface_count ); + vg_align8(sizeof(struct world_surface)*world->surface_count) ); /* error material */ struct world_surface *errmat = &world->surfaces[0]; @@ -791,6 +791,44 @@ VG_STATIC void world_entities_init( world_instance *world ) world->water.enabled = 1; water_set_surface( world, water->transform.co[1] ); } + + /* volumes */ + for( u32 j=0; jent_volume); j++ ){ + ent_volume *volume = mdl_arritm( &world->ent_volume, j ); + mdl_transform_m4x3( &volume->transform, volume->to_world ); + m4x3_invert_full( volume->to_world, volume->to_local ); + } + + /* audio packs */ + for( u32 j=0; jent_audio); j++ ){ + ent_audio *audio = mdl_arritm( &world->ent_audio, j ); + + for( u32 k=0; kclip_count; k++ ){ + ent_audio_clip *clip = mdl_arritm( &world->ent_audio_clip, + audio->clip_start+k ); + + if( clip->file.pack_size ){ + u32 size = clip->file.pack_size, + offset = clip->file.pack_offset; + + /* FIXME: Ditchable asset! */ + void *data = mdl_arritm(&world->meta.pack, clip->file.pack_offset); + + clip->clip.path = NULL; + clip->clip.flags = audio->flags; + clip->clip.data = data; + clip->clip.size = size; + } + else{ + clip->clip.path = mdl_pstr( &world->meta, clip->file.pstr_path ); + clip->clip.flags = audio->flags; + clip->clip.data = NULL; + clip->clip.size = 0; + } + + audio_clip_load( &clip->clip, world_global.generic_heap ); + } + } } VG_STATIC void world_load( world_instance *world, const char *path ) @@ -804,6 +842,8 @@ VG_STATIC void world_load( world_instance *world, const char *path ) mdl_load_metadata_block( &world->meta, world_global.generic_heap ); mdl_load_animation_block( &world->meta, world_global.generic_heap ); mdl_load_mesh_block( &world->meta, world_global.generic_heap ); + + /* TODO: This should get a seperate memory area */ mdl_load_pack_block( &world->meta, world_global.generic_heap ); mdl_load_array( &world->meta, &world->ent_gate, @@ -823,6 +863,12 @@ VG_STATIC void world_load( world_instance *world, const char *path ) "ent_route", world_global.generic_heap ); mdl_load_array( &world->meta, &world->ent_water, "ent_water", world_global.generic_heap ); + mdl_load_array( &world->meta, &world->ent_audio_clip, + "ent_audio_clip", world_global.generic_heap ); + mdl_load_array( &world->meta, &world->ent_audio, + "ent_audio", world_global.generic_heap ); + mdl_load_array( &world->meta, &world->ent_volume, + "ent_volume", world_global.generic_heap ); mdl_close( &world->meta ); @@ -838,6 +884,11 @@ VG_STATIC void world_load( world_instance *world, const char *path ) #endif world_routes_ent_init( world ); world_entities_init( world ); + world->volume_bh = bh_create( world_global.generic_heap, + &bh_system_volumes, + world, + mdl_arrcount( &world->ent_volume ), + 1 ); /* main bulk */ world_generate( world );