more refactors..
[carveJwlIkooP6JGAAIwe30JlM.git] / world_render.c
index 8255d5355b35ffa31bbc418d17851ad08c51ef3c..1c030a6b66f79a90165856589caaa6832fb49c54 100644 (file)
@@ -8,6 +8,17 @@
 #include "world.h"
 #include "world_render.h"
 
+static int ccmd_set_time( int argc, const char *argv[] ){
+   if( argc == 1 ){
+      world_instance *world = world_current_instance();
+      world->time = atof( argv[0] );
+   }
+   else {
+      vg_error( "Usage set_time <0-1.0>\n" );
+   }
+   return 0;
+}
+
 VG_STATIC void async_world_render_init( void *payload, u32 size )
 {
    vg_info( "Allocate uniform buffers\n" );
@@ -53,6 +64,15 @@ VG_STATIC void async_world_render_init( void *payload, u32 size )
 
 VG_STATIC void world_render_init(void)
 {
+   VG_VAR_F32( k_day_length );
+   VG_VAR_I32( k_debug_light_indices );
+   VG_VAR_I32( k_debug_light_complexity );
+   VG_VAR_I32( k_light_preview );
+   vg_console_reg_cmd( "set_time", ccmd_set_time, NULL );
+
+   world_render.sky_rate = 1.0;
+   world_render.sky_target_rate = 1.0;
+
    shader_scene_standard_register();
    shader_scene_standard_alphatest_register();
    shader_scene_vertex_blend_register();
@@ -61,6 +81,15 @@ VG_STATIC void world_render_init(void)
    shader_scene_position_register();
    shader_model_sky_register();
 
+   vg_info( "Loading world resources\n" );
+   vg_linear_clear( vg_mem.scratch );
+
+   mdl_context msky;
+   mdl_open( &msky, "models/rs_skydome.mdl", vg_mem.scratch );
+   mdl_load_metadata_block( &msky, vg_mem.scratch );
+   mdl_async_load_glmesh( &msky, &world_render.skydome );
+   mdl_close( &msky );
+
    vg_info( "Loading default world textures\n" );
    vg_tex2d_load_qoi_async_file( "textures/garbage.qoi", 
                                  VG_TEX2D_NEAREST|VG_TEX2D_REPEAT, 
@@ -423,7 +452,8 @@ VG_STATIC void render_world_gates( world_instance *world, camera *cam,
 
 VG_STATIC void world_prerender( world_instance *world )
 {
-   world->time += vg.time_delta * (1.0/(k_day_length*60.0));
+   f32 day_length = vg_maxf(0.1f, fabsf(k_day_length)) * vg_signf(k_day_length);
+   world->time += vg.time_delta * (1.0/(day_length*60.0));
 
    struct ub_world_lighting *state = &world->ub_lighting;