X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=skaterift.c;h=5f2f7066a3d6ca9475031c1d87535fb40626b52b;hb=5b06975b35952497d771db4171c7454123edfea1;hp=bb278ffa71726b4baf4e70c84fafed9d9c421f2b;hpb=f7db507815e2822d971031c30f25e02b45e9c914;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/skaterift.c b/skaterift.c index bb278ff..5f2f706 100644 --- a/skaterift.c +++ b/skaterift.c @@ -147,7 +147,6 @@ VG_STATIC void vg_update_post(void) VG_STATIC void vg_framebuffer_resize( int w, int h ) { render_fb_resize(); - water_fb_resize(); } VG_STATIC void present_view_with_post_processing(void) @@ -159,28 +158,60 @@ VG_STATIC void present_view_with_post_processing(void) glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_DST_ALPHA); glBlendEquation(GL_FUNC_ADD); - shader_blitblur_use(); - shader_blitblur_uTexMain( 0 ); - shader_blitblur_uTexMotion( 1 ); - shader_blitblur_uBlurStrength( cl_blur_strength ); - glActiveTexture( GL_TEXTURE0 ); + if( cl_blur ) + { + shader_blitblur_use(); + shader_blitblur_uTexMain( 0 ); + shader_blitblur_uTexMotion( 1 ); + shader_blitblur_uBlurStrength(cl_blur_strength / (vg.frame_delta*60.0f)); + + v2f menu_blurring; + v2_muls( (v2f){ 0.04f, 0.001f }, menu_opacity, menu_blurring ); + shader_blitblur_uOverrideDir( menu_blurring ); + + if( cl_view_id == 0 ) + render_fb_bind_texture( gpipeline.fb_main, 0, 0 ); + else if( cl_view_id == 1 ) + render_fb_bind_texture( gpipeline.fb_main, 1, 0 ); + else + render_fb_bind_texture( gpipeline.fb_main, 0, 0 ); - if( cl_view_id == 0 ) - glBindTexture( GL_TEXTURE_2D, gpipeline.rgb_background ); - else if( cl_view_id == 1 ) - glBindTexture( GL_TEXTURE_2D, gpipeline.mv_background ); + render_fb_bind_texture( gpipeline.fb_main, 1, 1 ); + } else - glBindTexture( GL_TEXTURE_2D, gpipeline.rgb_background ); - - glActiveTexture( GL_TEXTURE1 ); - glBindTexture( GL_TEXTURE_2D, gpipeline.mv_background ); + { + shader_blit_use(); + shader_blit_uTexMain( 0 ); + render_fb_bind_texture( gpipeline.fb_main, 0, 0 ); + } render_fsquad(); } +VG_STATIC void render_player_transparent(void) +{ + static camera small_cam; /* DOES NOT NEED TO BE STATIC BUT MINGW + SAIS OTHERWISE */ + + m4x3_copy( main_camera.transform, small_cam.transform ); + + small_cam.fov = main_camera.fov; + small_cam.nearz = 0.05f; + small_cam.farz = 60.0f; + + camera_update_view( &small_cam ); + camera_update_projection( &small_cam ); + camera_finalize( &small_cam ); + + /* Draw player to window buffer and blend background ontop */ + + glBindFramebuffer( GL_FRAMEBUFFER, 0 ); + draw_player( &small_cam ); +} + VG_STATIC void render_scene(void) { - glBindFramebuffer( GL_FRAMEBUFFER, gpipeline.fb_background ); + render_fb_bind( gpipeline.fb_main ); glClearColor( 0.0f, 0.0f, 0.0f, 1.0f ); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT ); @@ -188,10 +219,20 @@ VG_STATIC void render_scene(void) glEnable( GL_DEPTH_TEST ); render_world( &main_camera ); + + int player_transparent = !(player.is_dead || freecam), + player_draw = !cl_menu; + + if( !player_transparent && player_draw ) + draw_player( &main_camera ); + render_water_texture( &main_camera ); - glBindFramebuffer( GL_FRAMEBUFFER, gpipeline.fb_background ); + render_fb_bind( gpipeline.fb_main ); render_water_surface( &main_camera ); render_world_gates( &main_camera ); + + if( player_transparent && player_draw ) + render_player_transparent(); } VG_STATIC void render_menu(void) @@ -200,31 +241,6 @@ VG_STATIC void render_menu(void) menu_render( &main_camera ); } -VG_STATIC void render_player_into_world(void) -{ - glBindFramebuffer( GL_FRAMEBUFFER, gpipeline.fb_background ); - draw_player( &main_camera ); -} - -VG_STATIC void render_player_transparent(void) -{ - camera small_cam; - m4x3_copy( main_camera.transform, small_cam.transform ); - - small_cam.fov = main_camera.fov; - small_cam.nearz = 0.05f; - small_cam.farz = 60.0f; - - camera_update_view( &small_cam ); - camera_update_projection( &small_cam ); - camera_finalize( &small_cam ); - - /* Draw player to window buffer and blend background ontop */ - - glBindFramebuffer( GL_FRAMEBUFFER, 0 ); - draw_player( &small_cam ); -} - VG_STATIC void render_main_game(void) { static float fov = 60.0f; @@ -247,15 +263,6 @@ VG_STATIC void render_main_game(void) /* ========== Begin Frame ========== */ render_scene(); - - if( !cl_menu ) - { - if( player.is_dead | freecam ) - render_player_into_world(); - else - render_player_transparent(); - } - present_view_with_post_processing(); if( cl_menu ) @@ -335,6 +342,7 @@ VG_STATIC void vg_ui(void) //glPolygonMode( GL_FRONT_AND_BACK, GL_FILL ); audio_debug_soundscapes(); + render_view_framebuffer_ui(); } #if 0