X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=world_render.h;h=ad0d5c43a2d469fdb31c1650a7559241e08a7457;hb=f99902f513b0ad606437bf32de47405dd4ea5f98;hp=09ecc19e4ce9241eca46edcf04ab43df6cd406a3;hpb=4fa1c611e0af4c32cdcc891f8c511217a2762d65;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/world_render.h b/world_render.h index 09ecc19..ad0d5c4 100644 --- a/world_render.h +++ b/world_render.h @@ -48,9 +48,6 @@ VG_STATIC void world_render_init(void) 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; @@ -186,8 +183,6 @@ VG_STATIC void render_world_vb( world_instance *world, camera *cam ) 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 ); @@ -216,8 +211,6 @@ VG_STATIC void render_world_standard( world_instance *world, camera *cam ) 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 ); @@ -247,8 +240,6 @@ VG_STATIC void render_world_alphatest( world_instance *world, camera *cam ) 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); @@ -292,8 +283,6 @@ VG_STATIC void render_terrain( world_instance *world, camera *cam ) 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 ); } @@ -383,6 +372,49 @@ VG_STATIC void render_world_gates( world_instance *world, camera *cam, } } +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 ) {