X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=world_render.c;h=c332aced5431851cb0b0bf17e14e5c962e6a1547;hb=09be4380a98386d6494946fbd3369458f8e7f267;hp=1c030a6b66f79a90165856589caaa6832fb49c54;hpb=c2ee05fe23699fd1de7e1d8259b9bc272b232058;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/world_render.c b/world_render.c index 1c030a6..c332ace 100644 --- a/world_render.c +++ b/world_render.c @@ -75,6 +75,7 @@ VG_STATIC void world_render_init(void) shader_scene_standard_register(); shader_scene_standard_alphatest_register(); + shader_scene_fxglow_register(); shader_scene_vertex_blend_register(); shader_scene_terrain_register(); shader_scene_depth_register(); @@ -318,6 +319,38 @@ VG_STATIC void render_world_alphatest( world_instance *world, camera *cam ) glEnable(GL_CULL_FACE); } +VG_STATIC void render_world_fxglow( world_instance *world, camera *cam ){ + glDrawBuffers( 1, (GLenum[]){ GL_COLOR_ATTACHMENT0 } ); + + shader_scene_fxglow_use(); + shader_scene_fxglow_uTexMain(1); + shader_scene_fxglow_uPv( cam->mtx.pv ); + + world_link_lighting_ub( world, _shader_scene_fxglow.id ); + world_bind_position_texture( world, _shader_scene_fxglow.id, + _uniform_scene_fxglow_g_world_depth, 2 ); + world_bind_light_array( world, _shader_scene_fxglow.id, + _uniform_scene_fxglow_uLightsArray, 3 ); + world_bind_light_index( world, _shader_scene_fxglow.id, + _uniform_scene_fxglow_uLightsIndex, 4 ); + + shader_scene_fxglow_uCamera( cam->transform[3] ); + glDisable(GL_CULL_FACE); + + struct world_pass pass = { + .shader = k_shader_fxglow, + .cam = cam, + .fn_bind_textures = bindpoint_diffuse_texture1, + .fn_set_mdl = shader_scene_fxglow_uMdl, + .fn_set_uPvmPrev = shader_scene_fxglow_uPvmPrev, + }; + + world_render_both_stages( world, &pass ); + + glEnable(GL_CULL_FACE); + glDrawBuffers( 2, (GLenum[]){ GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 } ); +} + VG_STATIC void bindpoint_terrain( world_instance *world, struct world_surface *mat ) { @@ -422,7 +455,7 @@ VG_STATIC void render_world_gates( world_instance *world, camera *cam, float dist = v3_dist2( gi->co[0], cam->transform[3] ); - vg_line_pt3( gi->co[0], 0.25f, VG__BLUE ); + vg_line_point( gi->co[0], 0.25f, VG__BLUE ); if( dist < closest ){ closest = dist; @@ -439,11 +472,13 @@ VG_STATIC void render_world_gates( world_instance *world, camera *cam, render_gate( world, gate, cam, layer_depth ); } else if( gate->type == k_gate_type_nonlocel ){ - if( skaterift.async_op != k_async_op_world_loading && - skaterift.async_op != k_async_op_world_preloading ){ - world_instance *dest_world = &world_static.worlds[ gate->target ]; - render_gate( dest_world, gate, cam, layer_depth ); + if( world_loader.state != k_world_loader_none ){ + world->rendering_gate = NULL; + return; } + + world_instance *dest_world = &world_static.worlds[ gate->target ]; + render_gate( dest_world, gate, cam, layer_depth ); } else world->rendering_gate = NULL; @@ -452,8 +487,14 @@ VG_STATIC void render_world_gates( world_instance *world, camera *cam, VG_STATIC void world_prerender( world_instance *world ) { - 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)); + + if( mdl_arrcount( &world->ent_light ) ){ + f32 rate = vg_maxf(0.1f, fabsf(k_day_length)) * vg_signf(k_day_length); + world->time += vg.time_delta * (1.0/(rate*60.0)); + } + else{ + world->time = 0.834; + } struct ub_world_lighting *state = &world->ub_lighting; @@ -498,6 +539,7 @@ VG_STATIC void render_world( world_instance *world, camera *cam, render_world_standard( world, cam ); render_world_vb( world, cam ); render_world_alphatest( world, cam ); + render_world_fxglow( world, cam ); render_terrain( world, cam ); if( layer_depth == 0 ){