X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=water.h;h=c2a7122c2244c1774e9f49f428803ad6afb85ec1;hb=cb16ccb05a796178c879ea8d5091663d215a5217;hp=297240b1a3494467aa8a66effc4f1b7cd662e997;hpb=afa80c76d03f5e983092e9d7be33a9102a7ab25e;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/water.h b/water.h index 297240b..c2a7122 100644 --- a/water.h +++ b/water.h @@ -1,10 +1,17 @@ +#include "common.h" +#include "model.h" + +static void water_register(void); +static void water_init(void); +static void water_fb_resize(void); +static void water_compute_depth( boxf bounds ); +static void water_set_surface( glmesh *surf, float height ); +static float water_height(void); + #ifndef WATER_H #define WATER_H -#define VG_3D -#include "vg/vg.h" - -#include "model.h" +#include "world.h" #include "render.h" #include "shaders/water.h" #include "scene.h" @@ -13,7 +20,7 @@ vg_tex2d tex_water_surf = { .path = "textures/water_surf.qoi" }; static struct { - GLuint fb, rgb, rb; + struct framebuffer fbreflect, fbdepth; glmesh mdl; GLuint depthmap; @@ -21,8 +28,18 @@ static struct int depth_computed; float height; + int enabled; +} +wrender = +{ + .fbreflect = { .format = GL_RGB, .div = 4 }, + .fbdepth = { .format = GL_RGBA, .div = 4 } +}; + +static float water_height(void) +{ + return wrender.height; } -wrender; static void water_register(void) { @@ -31,16 +48,27 @@ static void water_register(void) static void water_init(void) { - create_renderbuffer_std( &wrender.fb, &wrender.rgb, &wrender.rb ); + /* TODO: probably dont do this every time */ + wrender.enabled = 1; + + fb_init( &wrender.fbreflect ); + fb_init( &wrender.fbdepth ); } -static int ray_world( v3f pos, v3f dir, ray_hit *hit ); +static void water_fb_resize(void) +{ + if( !wrender.enabled ) + return; + + fb_resize( &wrender.fbreflect ); + fb_resize( &wrender.fbdepth ); +} -#ifndef VG_RELEASE -__attribute__((minsize)) -#endif static void water_compute_depth( boxf bounds ) { + if( !wrender.enabled ) + return; + #ifdef VG_RELEASE int const kres = 512; #else @@ -58,7 +86,7 @@ static void water_compute_depth( boxf bounds ) { for( int x=0; x