X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=world_water.h;h=4281981c5549376742e930e0883eb2ee22b5b240;hb=d8fc0acce1b39466038284aa6f1941ebe98c8348;hp=e31994ab57a111ac30f221957eb865c6fb8b050b;hpb=23a1be081ab9e378cba49a23b8ed4d4082b580c1;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/world_water.h b/world_water.h index e31994a..4281981 100644 --- a/world_water.h +++ b/world_water.h @@ -8,6 +8,7 @@ #include "world.h" #include "render.h" #include "shaders/water.h" +#include "shaders/water_fast.h" #include "scene.h" vg_tex2d tex_water_surf = { .path = "textures/water_surf.qoi" }; @@ -16,6 +17,7 @@ VG_STATIC void world_water_init(void) { vg_info( "world_water_init\n" ); shader_water_register(); + shader_water_fast_register(); vg_acquire_thread_sync(); { @@ -51,7 +53,7 @@ VG_STATIC void water_set_surface( float height ) VG_STATIC void render_water_texture( m4x3f camera ) { - if( !world.water.enabled ) + if( !world.water.enabled || (vg.quality_profile == k_quality_profile_low) ) return; /* Draw reflection buffa */ @@ -125,54 +127,92 @@ VG_STATIC void render_water_surface( m4x4f pv, m4x3f camera ) if( !world.water.enabled ) return; - /* Draw surface */ - shader_water_use(); - - fb_bindtex( &world.water.fbreflect, 0 ); - shader_water_uTexMain( 0 ); + if( vg.quality_profile == k_quality_profile_high ) + { + /* Draw surface */ + shader_water_use(); + + fb_bindtex( &world.water.fbreflect, 0 ); + shader_water_uTexMain( 0 ); + + vg_tex2d_bind( &tex_water_surf, 1 ); + shader_water_uTexDudv( 1 ); + shader_water_uInvRes( (v2f){ + 1.0f / (float)vg.window_x, + 1.0f / (float)vg.window_y }); - vg_tex2d_bind( &tex_water_surf, 1 ); - shader_water_uTexDudv( 1 ); - shader_water_uInvRes( (v2f){ - 1.0f / (float)vg.window_x, - 1.0f / (float)vg.window_y }); + shader_link_standard_ub( _shader_water.id, 2 ); - shader_link_standard_ub( _shader_water.id, 2 ); + fb_bindtex( &world.water.fbdepth, 3 ); + shader_water_uTexBack( 3 ); + shader_water_uTime( world.time ); + shader_water_uCamera( camera[3] ); + shader_water_uSurfaceY( world.water.height ); - fb_bindtex( &world.water.fbdepth, 3 ); - shader_water_uTexBack( 3 ); - shader_water_uTime( world.time ); - shader_water_uCamera( camera[3] ); - shader_water_uSurfaceY( world.water.height ); + shader_water_uPv( pv ); - shader_water_uPv( pv ); + m4x3f full; + m4x3_identity( full ); + shader_water_uMdl( full ); - m4x3f full; - m4x3_identity( full ); - full[3][1] = world.water.height; + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); + glBlendEquation(GL_FUNC_ADD); - shader_water_uMdl( full ); + mesh_bind( &world.mesh_no_collide ); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); - glBlendEquation(GL_FUNC_ADD); + for( int i=0; iinfo.shader == k_shader_water ) + { + shader_water_uShoreColour( mat->info.colour ); + shader_water_uOceanColour( mat->info.colour1 ); - mesh_bind( &world.mesh_no_collide ); + mdl_draw_submesh( &mat->sm_no_collide ); + } + } - for( int i=0; iinfo.shader == k_shader_water ) + vg_tex2d_bind( &tex_water_surf, 1 ); + shader_water_fast_uTexDudv( 1 ); + shader_water_fast_uTime( world.time ); + shader_water_fast_uCamera( camera[3] ); + shader_water_fast_uSurfaceY( world.water.height ); + shader_link_standard_ub( _shader_water_fast.id, 2 ); + + m4x3f full; + m4x3_identity( full ); + shader_water_fast_uMdl( full ); + shader_water_fast_uPv( pv ); + + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); + glBlendEquation(GL_FUNC_ADD); + + mesh_bind( &world.mesh_no_collide ); + + for( int i=0; iinfo.colour ); - shader_water_uOceanColour( mat->info.colour1 ); + struct world_material *mat = &world.materials[i]; - mdl_draw_submesh( &mat->sm_no_collide ); + if( mat->info.shader == k_shader_water ) + { + shader_water_fast_uShoreColour( mat->info.colour ); + shader_water_fast_uOceanColour( mat->info.colour1 ); + + mdl_draw_submesh( &mat->sm_no_collide ); + } } - } - glDisable(GL_BLEND); + glDisable(GL_BLEND); + } } #endif /* WATER_H */