fb->fixed_h = 1024;
fb->resolution_div = 0;
- /* TODO: We could get away with this being R16u, and just have it be
- * a normed value between min and max of the bounding box Y */
-
fb->attachments[0].display_name = NULL;
fb->attachments[0].purpose = k_framebuffer_attachment_type_colour;
fb->attachments[0].internalformat = GL_RG16F;
shader_scene_vertex_blend_uPvmPrev( cam->mtx_prev.pv );
shader_scene_vertex_blend_uMdl( identity_matrix );
shader_scene_vertex_blend_uCamera( cam->transform[3] );
- shader_scene_vertex_blend_uBoard0( TEMP_BOARD_0 );
- shader_scene_vertex_blend_uBoard1( TEMP_BOARD_1 );
world_render_both_stages( world, k_shader_standard_vertex_blend,
bindpoint_diffuse_texture1 );
shader_scene_standard_uMdl( identity_matrix );
shader_scene_standard_uCamera( cam->transform[3] );
- shader_scene_standard_uBoard0( TEMP_BOARD_0 );
- shader_scene_standard_uBoard1( TEMP_BOARD_1 );
world_render_both_stages( world, k_shader_standard,
bindpoint_diffuse_texture1 );
shader_scene_standard_alphatest_uMdl( identity_matrix );
shader_scene_standard_alphatest_uCamera( cam->transform[3] );
- shader_scene_standard_alphatest_uBoard0( TEMP_BOARD_0 );
- shader_scene_standard_alphatest_uBoard1( TEMP_BOARD_1 );
glDisable(GL_CULL_FACE);
shader_scene_terrain_uMdl( identity_matrix );
shader_scene_terrain_uCamera( cam->transform[3] );
- shader_scene_terrain_uBoard0( TEMP_BOARD_0 );
- shader_scene_terrain_uBoard1( TEMP_BOARD_1 );
world_render_both_stages( world, k_shader_terrain_blend, bindpoint_terrain );
}
}
if( gate ){
-#if 0
- world_instance *dest_world = &world_global.worlds[ gate->world_index ];
- render_gate( dest_world, gate, cam, layer_depth );
-#else
- render_gate( world, gate, cam, layer_depth );
-#endif
+ /* should really be set in fixed update since its used in the physics
+ * of most systems. too bad! */
+ world->rendering_gate = gate;
+
+ if( gate->type == k_gate_type_teleport ){
+ render_gate( world, gate, cam, layer_depth );
+ }
+ else if( gate->type == k_gate_type_nonlocel ){
+ world_instance *dest_world = &world_global.worlds[ gate->target ];
+ render_gate( dest_world, gate, cam, layer_depth );
+ }
+ else
+ world->rendering_gate = NULL;
}
}
+VG_STATIC void world_prerender( world_instance *world )
+{
+ static double g_time = 0.0;
+ g_time += vg.time_delta * (1.0/(k_day_length*60.0));
+
+ struct ub_world_lighting *state = &world->ub_lighting;
+
+ state->g_time = g_time;
+ state->g_realtime = vg.time;
+ state->g_debug_indices = k_debug_light_indices;
+ state->g_light_preview = k_light_preview;
+ state->g_debug_complexity = k_debug_light_complexity;
+
+ state->g_time_of_day = vg_fractf( g_time );
+ state->g_day_phase = cosf( state->g_time_of_day * VG_PIf * 2.0f );
+ state->g_sunset_phase= cosf( state->g_time_of_day * VG_PIf * 4.0f + VG_PIf );
+
+ state->g_day_phase = state->g_day_phase * 0.5f + 0.5f;
+ state->g_sunset_phase = powf( state->g_sunset_phase * 0.5f + 0.5f, 6.0f );
+
+ float a = state->g_time_of_day * VG_PIf * 2.0f;
+ state->g_sun_dir[0] = sinf( a );
+ state->g_sun_dir[1] = cosf( a );
+ state->g_sun_dir[2] = 0.2f;
+ v3_normalize( state->g_sun_dir );
+
+
+ world->probabilities[ k_probability_curve_constant ] = 1.0f;
+
+ float dp = state->g_day_phase;
+
+ world->probabilities[ k_probability_curve_wildlife_day ] =
+ (dp*dp*0.8f+state->g_sunset_phase)*0.8f;
+ world->probabilities[ k_probability_curve_wildlife_night ] =
+ 1.0f-powf(fabsf((state->g_time_of_day-0.5f)*5.0f),5.0f);
+
+
+ glBindBuffer( GL_UNIFORM_BUFFER, world->ubo_lighting );
+ glBufferSubData( GL_UNIFORM_BUFFER, 0,
+ sizeof(struct ub_world_lighting), &world->ub_lighting );
+}
+
VG_STATIC void render_world( world_instance *world, camera *cam,
int layer_depth )
{