if( vg.quality_profile == k_quality_profile_low )
return;
+ vg_info( "Applying foliage (%u)\n", mat->info.pstr_name );
+
vg_linear_clear( vg_mem.scratch );
mdl_context *mfoliage =
mdl_node *mblob = mdl_node_from_name( mfoliage, "blob" );
mdl_submesh *sm_blob = mdl_node_submesh( mfoliage, mblob, 0 );
+ int count = 0;
+
for( int i=0;i<100000;i++ )
{
v3f pos;
ray_hit hit;
hit.dist = INFINITY;
- if( ray_world( pos, (v3f){0.0f,-1.0f,0.0f}, &hit ))
+ if( ray_world( pos, (v3f){0.0001f,-1.0f,0.0001f}, &hit ))
{
struct world_material *m1 = ray_hit_material( &hit );
if((hit.normal[1] > 0.8f) && (m1 == mat) && (hit.pos[1] > 0.0f+10.0f))
v3_copy( hit.pos, transform[3] );
scene_add_submesh( world.scene_no_collide, mfoliage,
sm_blob, transform);
+
+ count ++;
}
}
}
+
+ vg_info( "%d foliage models added\n", count );
}
VG_STATIC void world_ents_allocate(void)
world.scene_no_collide = scene_init( world.dynamic_vgl, 200000, 500000 );
-#if 0
- vg_info( "Applying foliage\n" );
- srand(0);
- world_apply_procedural_foliage();
- scene_copy_slice( world.scene_no_collide, &world.sm_foliage_main );
-#endif
-
for( int i=0; i<world.material_count; i++ )
{
struct world_material *mat = &world.materials[ i ];
/*
* Rendering the depth map
*/
- m4x4f ortho;
- m4x3f camera;
+ camera ortho;
v3f extent;
v3_sub( world.scene_geo->bbx[1], world.scene_geo->bbx[0], extent );
rl = 1.0f / (fr-fl),
tb = 1.0f / (ft-fb);
- m4x4_zero( ortho );
- ortho[0][0] = 2.0f * rl;
- ortho[2][1] = 2.0f * tb;
- ortho[3][0] = (fr + fl) * -rl;
- ortho[3][1] = (ft + fb) * -tb;
- ortho[3][3] = 1.0f;
- m4x3_identity( camera );
+ m4x4_zero( ortho.mtx.p );
+ ortho.mtx.p[0][0] = 2.0f * rl;
+ ortho.mtx.p[2][1] = 2.0f * tb;
+ ortho.mtx.p[3][0] = (fr + fl) * -rl;
+ ortho.mtx.p[3][1] = (ft + fb) * -tb;
+ ortho.mtx.p[3][3] = 1.0f;
+ m4x3_identity( ortho.transform );
+ camera_update_view( &ortho );
+ camera_finalize( &ortho );
glDisable(GL_DEPTH_TEST);
glDisable(GL_BLEND);
glDisable(GL_CULL_FACE);
- glBindFramebuffer( GL_FRAMEBUFFER, gpipeline.fb_depthmap );
- glViewport( 0, 0, 1024, 1024 );
- shader_fscolour_use();
- shader_fscolour_uColour( (v4f){-9999.0f,-9999.0f,-9999.0f,-9999.0f} );
+ render_fb_bind( gpipeline.fb_heightmap );
+ shader_blitcolour_use();
+ shader_blitcolour_uColour( (v4f){-9999.0f,-9999.0f,-9999.0f,-9999.0f} );
render_fsquad();
/* todo: hmm?? */
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE);
glBlendEquation(GL_MAX);
- render_world_depth( ortho, camera );
+
+ render_world_depth( &ortho );
glDisable(GL_BLEND);
glEnable(GL_DEPTH_TEST);
glBindFramebuffer( GL_FRAMEBUFFER, 0 );
-
/*
* TODO: World settings entity
*/
VG_STATIC void world_unload(void)
{
+ vg_acquire_thread_sync();
+
/* free meshes */
mesh_free( &world.mesh_route_lines );
mesh_free( &world.mesh_geo );
world.collector_count = 0;
world.water.enabled = 0;
+
+ vg_release_thread_sync();
}
VG_STATIC void world_load(void)