#include "world_render.h"
#include "font.h"
#include "gui.h"
+#include "respawn.h"
static int ccmd_set_time( int argc, const char *argv[] ){
if( argc == 1 ){
shader_scene_standard_register();
shader_scene_standard_alphatest_register();
+ shader_scene_override_register();
shader_scene_cubemapped_register();
shader_scene_fxglow_register();
shader_scene_vertex_blend_register();
shader_scene_terrain_uBlendOffset( mat->info.colour1 );
}
+VG_STATIC void bindpoint_none( world_instance *world,
+ struct world_surface *mat ){
+
+}
+
VG_STATIC void render_terrain( world_instance *world, camera *cam )
{
shader_scene_terrain_use();
struct ub_world_lighting *state = &world->ub_lighting;
state->g_time = world->time;
- state->g_realtime = vg.time;
+ state->g_realtime = vg.time_real;
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( world->time );
+
+ if( skaterift.activity == k_skaterift_respawning )
+ state->g_time_of_day = 0.1f;
+ else
+ state->g_time_of_day = vg_fractf( world->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 );
render_world_fxglow( world, cam, layer_depth );
}
+
+VG_STATIC
+void render_world_override_pass( world_instance *world,
+ struct world_pass *pass ){
+ for( int i=0; i<world->surface_count; i++ ){
+ struct world_surface *mat = &world->surfaces[i];
+
+ if( mat->info.flags & k_material_flag_ghosts ) continue;
+
+ mdl_submesh *sm;
+ if( pass->geo_type == k_world_geo_type_solid )
+ sm = &mat->sm_geo;
+ else
+ sm = &mat->sm_no_collide;
+
+ if( !sm->indice_count )
+ continue;
+
+ m4x3f mmdl;
+ m4x3_identity( mmdl );
+ pass->fn_set_mdl( mmdl );
+ pass->fn_set_uPvmPrev( pass->cam->mtx_prev.pv );
+ pass->fn_bind_textures( world, mat );
+ mdl_draw_submesh( sm );
+ }
+}
+
+VG_STATIC void render_world_override( world_instance *world ){
+ struct world_pass pass = {
+ .cam = &skaterift.cam,
+ .fn_bind_textures = bindpoint_none,
+ .fn_set_mdl = shader_scene_override_uMdl,
+ .fn_set_uPvmPrev = shader_scene_override_uPvmPrev,
+ .shader = k_shader_override
+ };
+
+ shader_scene_override_use();
+ respawn_chooser_shader_uniforms();
+ shader_scene_override_uTexGarbage(0);
+ shader_scene_override_uTexMain(1);
+ shader_scene_override_uPv( pass.cam->mtx.pv );
+
+ world_link_lighting_ub( world, _shader_scene_override.id );
+ world_bind_position_texture( world, _shader_scene_override.id,
+ _uniform_scene_override_g_world_depth, 2 );
+ world_bind_light_array( world, _shader_scene_override.id,
+ _uniform_scene_override_uLightsArray, 3 );
+ world_bind_light_index( world, _shader_scene_override.id,
+ _uniform_scene_override_uLightsIndex, 4 );
+
+ bind_terrain_noise();
+ shader_scene_override_uCamera( pass.cam->transform[3] );
+
+ glDisable( GL_CULL_FACE );
+ mesh_bind( &world->mesh_geo );
+ pass.geo_type = k_world_geo_type_solid;
+ render_world_override_pass( world, &pass );
+ mesh_bind( &world->mesh_no_collide );
+ pass.geo_type = k_world_geo_type_nonsolid;
+ render_world_override_pass( world, &pass );
+ glEnable( GL_CULL_FACE );
+}
+
VG_STATIC void render_cubemap_side( world_instance *world, ent_cubemap *cm,
u32 side ){
camera cam;