* Add all triangles from the model, which match the material ID
* applies affine transform to the model
*/
-VG_STATIC void world_add_all_if_material( m4x3f transform, scene_context *scene,
+static void world_add_all_if_material( m4x3f transform, scene_context *scene,
mdl_context *mdl, u32 id )
{
for( u32 i=0; i<mdl_arrcount(&mdl->meshs); i++ ){
* | |
* |________|
*/
-VG_STATIC void world_gen_add_blob( world_instance *world,
+static void world_gen_add_blob( world_instance *world,
scene_context *scene, ray_hit *hit )
{
m4x3f transform;
scene_vert *ref = &world->scene_geo.arrvertices[ hit->tri[0] ];
- for( u32 i=0; i<vg_list_size(verts); i++ )
- {
+ for( u32 i=0; i<vg_list_size(verts); i++ ){
scene_vert *pvert = &dst_verts[ i ],
*src = &verts[ i ];
m4x3_mulv( transform, src->co, pvert->co );
- scene_vert_pack_norm( pvert, transform[1] );
+ scene_vert_pack_norm( pvert, transform[1], 0.0f );
v2_copy( ref->uv, pvert->uv );
}
/*
* Sprinkle foliage models over the map on terrain material
*/
-VG_STATIC void world_apply_procedural_foliage( world_instance *world,
+static void world_apply_procedural_foliage( world_instance *world,
scene_context *scene,
struct world_surface *mat )
{
vg_info( "%d foliage models added\n", count );
}
-VG_STATIC
+static
void world_unpack_submesh_dynamic( world_instance *world,
scene_context *scene, mdl_submesh *sm ){
if( sm->flags & k_submesh_flag_consumed ) return;
/*
* Create the main meshes for the world
*/
-VG_STATIC void world_gen_generate_meshes( world_instance *world ){
+static void world_gen_generate_meshes( world_instance *world ){
/*
* Compile meshes into the world scenes
*/
}
}
+ /* unpack region models */
+ for( u32 i=0; i<mdl_arrcount( &world->ent_region ); i++ ){
+ ent_region *region = mdl_arritm( &world->ent_region, i );
+
+ for( u32 j=0; j<region->submesh_count; j ++ ){
+ mdl_submesh *sm = mdl_arritm( &world->meta.submeshs,
+ region->submesh_start+j );
+ world_unpack_submesh_dynamic( world, &world->scene_no_collide, sm );
+ }
+ }
+
/* unpack gate models */
for( u32 i=0; i<mdl_arrcount( &world->ent_gate ); i++ ){
ent_gate *gate = mdl_arritm( &world->ent_gate, i );
}
}
+ /* unpack prop models */
+ for( u32 i=0; i<mdl_arrcount( &world->ent_prop ); i++ ){
+ ent_prop *prop = mdl_arritm( &world->ent_prop, i );
+
+ for( u32 j=0; j<prop->submesh_count; j ++ ){
+ mdl_submesh *sm = mdl_arritm( &world->meta.submeshs,
+ prop->submesh_start+j );
+ world_unpack_submesh_dynamic( world, &world->scene_no_collide, sm );
+ }
+ }
+
vg_async_dispatch( call, async_scene_upload );
}
/*
* Async reciever to buffer light index data
*/
-VG_STATIC void async_upload_light_indices( void *payload, u32 size ){
+static void async_upload_light_indices( void *payload, u32 size ){
struct light_indices_upload_info *info = payload;
glGenTextures( 1, &info->world->tex_light_cubes );
/*
* Computes light indices for world
*/
-VG_STATIC void world_gen_compute_light_indices( world_instance *world ){
+static void world_gen_compute_light_indices( world_instance *world ){
/* light cubes */
v3f cubes_min, cubes_max;
v3_muls( world->scene_geo.bbx[0], 1.0f/k_world_light_cube_size, cubes_min );
/*
* Rendering pass needed to complete the world
*/
-VG_STATIC void async_world_postprocess( void *payload, u32 _size ){
+static void async_world_postprocess( void *payload, u32 _size ){
/* create scene lighting buffer */
world_instance *world = payload;
}
glBindFramebuffer( GL_FRAMEBUFFER, 0 );
- world->status = k_world_status_loaded;
}
/* Loads textures from the pack file */
-VG_STATIC void world_gen_load_surfaces( world_instance *world ){
+static void world_gen_load_surfaces( world_instance *world ){
vg_info( "Loading textures\n" );
world->texture_count = 0;