X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=world_render.c;h=37b095c7bd8939816e4d30115e06dc1018baab68;hb=333430b27b5f9f73cbe9ad7921a4735aaff444f1;hp=a7bb6939c6b5d02b07f76e6c5eb29fd2d997afc1;hpb=f2c3e6ffba0231be14961f0149106cecbade8124;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/world_render.c b/world_render.c index a7bb693..37b095c 100644 --- a/world_render.c +++ b/world_render.c @@ -22,7 +22,7 @@ static int ccmd_set_time( int argc, const char *argv[] ){ return 0; } -VG_STATIC void async_world_render_init( void *payload, u32 size ) +static void async_world_render_init( void *payload, u32 size ) { vg_info( "Allocate uniform buffers\n" ); for( int i=0; i<4; i++ ){ @@ -65,7 +65,7 @@ VG_STATIC void async_world_render_init( void *payload, u32 size ) } } -VG_STATIC void world_render_init(void) +static void world_render_init(void) { VG_VAR_F32( k_day_length ); VG_VAR_I32( k_debug_light_indices ); @@ -104,13 +104,13 @@ VG_STATIC void world_render_init(void) vg_async_call( async_world_render_init, NULL, 0 ); } -VG_STATIC void world_link_lighting_ub( world_instance *world, GLuint shader ) +static void world_link_lighting_ub( world_instance *world, GLuint shader ) { GLuint idx = glGetUniformBlockIndex( shader, "ub_world_lighting" ); glUniformBlockBinding( shader, idx, world->ubo_bind_point ); } -VG_STATIC void world_bind_position_texture( world_instance *world, +static void world_bind_position_texture( world_instance *world, GLuint shader, GLuint location, int slot ) { @@ -118,7 +118,7 @@ VG_STATIC void world_bind_position_texture( world_instance *world, glUniform1i( location, slot ); } -VG_STATIC void world_bind_light_array( world_instance *world, +static void world_bind_light_array( world_instance *world, GLuint shader, GLuint location, int slot ) { @@ -127,7 +127,7 @@ VG_STATIC void world_bind_light_array( world_instance *world, glUniform1i( location, slot ); } -VG_STATIC void world_bind_light_index( world_instance *world, +static void world_bind_light_index( world_instance *world, GLuint shader, GLuint location, int slot ) { @@ -136,13 +136,13 @@ VG_STATIC void world_bind_light_index( world_instance *world, glUniform1i( location, slot ); } -VG_STATIC void render_world_depth( world_instance *world, camera *cam ); +static void render_world_depth( world_instance *world, camera *cam ); /* * Rendering */ -VG_STATIC void bind_terrain_noise(void) +static void bind_terrain_noise(void) { glActiveTexture( GL_TEXTURE0 ); glBindTexture( GL_TEXTURE_2D, world_render.tex_terrain_noise ); @@ -159,7 +159,7 @@ struct world_pass{ void (*fn_set_uPvmPrev)( m4x4f pvm ); }; -VG_STATIC +static void world_render_traffic( world_instance *world, u32 material_id, struct world_pass *pass ){ if( !mdl_arrcount( &world->ent_traffic ) ) return; @@ -197,7 +197,7 @@ void world_render_traffic( world_instance *world, u32 material_id, } } -VG_STATIC +static void world_render_pass( world_instance *world, struct world_pass *pass ){ for( int i=0; isurface_count; i++ ){ struct world_surface *mat = &world->surfaces[i]; @@ -227,7 +227,7 @@ void world_render_pass( world_instance *world, struct world_pass *pass ){ } } -VG_STATIC +static void world_render_both_stages( world_instance *world, struct world_pass *pass ) { mesh_bind( &world->mesh_geo ); @@ -241,7 +241,7 @@ void world_render_both_stages( world_instance *world, struct world_pass *pass ) glEnable( GL_CULL_FACE ); } -VG_STATIC void bindpoint_diffuse_texture1( world_instance *world, +static void bindpoint_diffuse_texture1( world_instance *world, struct world_surface *mat ) { @@ -249,7 +249,7 @@ VG_STATIC void bindpoint_diffuse_texture1( world_instance *world, glBindTexture( GL_TEXTURE_2D, world->textures[ mat->info.tex_diffuse ] ); } -VG_STATIC void bindpoint_diffuse1_and_cubemap10( world_instance *world, +static void bindpoint_diffuse1_and_cubemap10( world_instance *world, struct world_surface *mat ){ glActiveTexture( GL_TEXTURE1 ); glBindTexture( GL_TEXTURE_2D, world->textures[ mat->info.tex_diffuse ] ); @@ -268,7 +268,7 @@ VG_STATIC void bindpoint_diffuse1_and_cubemap10( world_instance *world, shader_scene_cubemapped_uColour( mat->info.colour ); } -VG_STATIC void render_world_vb( world_instance *world, camera *cam ) +static void render_world_vb( world_instance *world, camera *cam ) { shader_scene_vertex_blend_use(); shader_scene_vertex_blend_uTexGarbage(0); @@ -298,7 +298,7 @@ VG_STATIC void render_world_vb( world_instance *world, camera *cam ) world_render_both_stages( world, &pass ); } -VG_STATIC void world_shader_standard_bind( world_instance *world, camera *cam ){ +static void world_shader_standard_bind( world_instance *world, camera *cam ){ shader_scene_standard_use(); shader_scene_standard_uTexGarbage(0); shader_scene_standard_uTexMain(1); @@ -316,7 +316,7 @@ VG_STATIC void world_shader_standard_bind( world_instance *world, camera *cam ){ shader_scene_standard_uCamera( cam->transform[3] ); } -VG_STATIC void render_world_standard( world_instance *world, camera *cam ){ +static void render_world_standard( world_instance *world, camera *cam ){ world_shader_standard_bind( world, cam ); struct world_pass pass = { .shader = k_shader_standard, @@ -329,7 +329,7 @@ VG_STATIC void render_world_standard( world_instance *world, camera *cam ){ world_render_both_stages( world, &pass ); } -VG_STATIC void render_world_cubemapped( world_instance *world, camera *cam, +static void render_world_cubemapped( world_instance *world, camera *cam, int layer_depth ){ if( !mdl_arrcount( &world->ent_cubemap ) ) return; @@ -377,7 +377,7 @@ VG_STATIC void render_world_cubemapped( world_instance *world, camera *cam, } } -VG_STATIC void render_world_alphatest( world_instance *world, camera *cam ){ +static void render_world_alphatest( world_instance *world, camera *cam ){ shader_scene_standard_alphatest_use(); shader_scene_standard_alphatest_uTexGarbage(0); shader_scene_standard_alphatest_uTexMain(1); @@ -412,11 +412,12 @@ VG_STATIC void render_world_alphatest( world_instance *world, camera *cam ){ glEnable(GL_CULL_FACE); } -VG_STATIC +static void world_render_challenges( world_instance *world, struct world_pass *pass, v3f pos, int layer_depth ){ if( !world ) return; if( skaterift.activity == k_skaterift_replay ) return; + if( world != world_current_instance() ) return; /* sort lists */ f32 radius = 40.0f; @@ -453,7 +454,7 @@ void world_render_challenges( world_instance *world, struct world_pass *pass, while( mdl_entity_id_type(next) == k_ent_objective ){ u32 index = mdl_entity_id_id( next ); objective_list[ objective_count ++ ] = index; - + ent_objective *objective = mdl_arritm( &world->ent_objective, index ); next = objective->id_next; } @@ -604,7 +605,7 @@ void world_render_challenges( world_instance *world, struct world_pass *pass, } } -VG_STATIC void render_world_fxglow( world_instance *world, camera *cam, +static void render_world_fxglow( world_instance *world, camera *cam, int layer_depth ){ shader_scene_fxglow_use(); shader_scene_fxglow_uUvOffset( (v2f){ 0.0f, 0.0f } ); @@ -636,7 +637,7 @@ VG_STATIC void render_world_fxglow( world_instance *world, camera *cam, glEnable(GL_CULL_FACE); } -VG_STATIC void bindpoint_terrain( world_instance *world, +static void bindpoint_terrain( world_instance *world, struct world_surface *mat ) { glActiveTexture( GL_TEXTURE1 ); @@ -646,12 +647,19 @@ VG_STATIC void bindpoint_terrain( world_instance *world, shader_scene_terrain_uBlendOffset( mat->info.colour1 ); } -VG_STATIC void bindpoint_none( world_instance *world, - struct world_surface *mat ){ - +static void bindpoint_override( world_instance *world, + struct world_surface *mat ){ + if( mat->info.flags & k_material_flag_collision ){ + shader_scene_override_uAlphatest(0); + } + else{ + glActiveTexture( GL_TEXTURE1 ); + glBindTexture( GL_TEXTURE_2D, world->textures[ mat->info.tex_diffuse ] ); + shader_scene_override_uAlphatest(1); + } } -VG_STATIC void render_terrain( world_instance *world, camera *cam ) +static void render_terrain( world_instance *world, camera *cam ) { shader_scene_terrain_use(); shader_scene_terrain_uTexGarbage(0); @@ -682,7 +690,7 @@ VG_STATIC void render_terrain( world_instance *world, camera *cam ) world_render_both_stages( world, &pass ); } -VG_STATIC void render_sky( world_instance *world, camera *cam ) +static void render_sky( world_instance *world, camera *cam ) { /* * Modify matrix to remove clipping and view translation @@ -731,7 +739,7 @@ VG_STATIC void render_sky( world_instance *world, camera *cam ) glDepthMask( GL_TRUE ); } -VG_STATIC void render_world_gates( world_instance *world, camera *cam, +static void render_world_gates( world_instance *world, camera *cam, int layer_depth ) { float closest = INFINITY; @@ -772,7 +780,7 @@ VG_STATIC void render_world_gates( world_instance *world, camera *cam, } } -VG_STATIC void world_prerender( world_instance *world ) +static void world_prerender( world_instance *world ) { if( mdl_arrcount( &world->ent_light ) ){ @@ -821,7 +829,7 @@ VG_STATIC void world_prerender( world_instance *world ) sizeof(struct ub_world_lighting), &world->ub_lighting ); } -VG_STATIC void render_world( world_instance *world, camera *cam, +static void render_world( world_instance *world, camera *cam, int layer_depth ) { render_sky( world, cam ); @@ -885,7 +893,7 @@ VG_STATIC void render_world( world_instance *world, camera *cam, } -VG_STATIC +static void render_world_override_pass( world_instance *world, struct world_pass *pass ){ for( int i=0; isurface_count; i++ ){ @@ -911,10 +919,10 @@ void render_world_override_pass( world_instance *world, } } -VG_STATIC void render_world_override( world_instance *world ){ +static void render_world_override( world_instance *world ){ struct world_pass pass = { .cam = &skaterift.cam, - .fn_bind_textures = bindpoint_none, + .fn_bind_textures = bindpoint_override, .fn_set_mdl = shader_scene_override_uMdl, .fn_set_uPvmPrev = shader_scene_override_uPvmPrev, .shader = k_shader_override @@ -947,7 +955,7 @@ VG_STATIC void render_world_override( world_instance *world ){ glEnable( GL_CULL_FACE ); } -VG_STATIC void render_cubemap_side( world_instance *world, ent_cubemap *cm, +static void render_cubemap_side( world_instance *world, ent_cubemap *cm, u32 side ){ camera cam; glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, @@ -993,7 +1001,7 @@ VG_STATIC void render_cubemap_side( world_instance *world, ent_cubemap *cm, render_world( world, &cam, -1 ); } -VG_STATIC void render_world_cubemaps( world_instance *world ){ +static void render_world_cubemaps( world_instance *world ){ if( world->cubemap_cooldown ) world->cubemap_cooldown --; else{ @@ -1013,7 +1021,7 @@ VG_STATIC void render_world_cubemaps( world_instance *world ){ } } -VG_STATIC void render_world_depth( world_instance *world, camera *cam ) +static void render_world_depth( world_instance *world, camera *cam ) { m4x3f identity_matrix; m4x3_identity( identity_matrix ); @@ -1029,7 +1037,7 @@ VG_STATIC void render_world_depth( world_instance *world, camera *cam ) mesh_draw( &world->mesh_geo ); } -VG_STATIC void render_world_position( world_instance *world, camera *cam ) +static void render_world_position( world_instance *world, camera *cam ) { m4x3f identity_matrix; m4x3_identity( identity_matrix );