medium sized dollop
[carveJwlIkooP6JGAAIwe30JlM.git] / world_water.h
index 85f4b5debd4766d7ee81f1fb3f379d8454653347..11d9594d6fada5c0729b066d172db2cb7467b73a 100644 (file)
@@ -26,18 +26,35 @@ wrender =
    .fbdepth   = { .format = GL_RGBA, .div = 4 }
 };
 
-static void world_water_register(void)
+static int world_water_init(void)
 {
+   vg_info( "world_water_init\n" );
    shader_water_register();
+   
+   if( vg_acquire_thread_sync(1) )
+   {
+      if( !fb_init( &wrender.fbreflect ) ||
+          !fb_init( &wrender.fbdepth ) )
+      {
+         vg_release_thread_sync(1);
+         return 0;
+      }
+
+      vg_tex2d_init( (vg_tex2d *[]){&tex_water_surf}, 1 );
+
+      vg_success( "done\n" );
+      vg_release_thread_sync(1);
+      return 1;
+   }
+   else
+      return 0;
 }
 
-static void world_water_init(void)
+static void world_water_free(void *_)
 {
-   /* TODO: probably dont do this every time */
-   wrender.enabled = 1;
-   
-   fb_init( &wrender.fbreflect );
-   fb_init( &wrender.fbdepth );
+   vg_tex2d_free( (vg_tex2d *[]){&tex_water_surf}, 1 );
+   fb_free( &wrender.fbreflect );
+   fb_free( &wrender.fbdepth );
 }
 
 static void water_fb_resize(void)
@@ -53,6 +70,7 @@ static void water_set_surface( glmesh *surf, float height )
 {
    wrender.mdl = *surf;
    wrender.height = height;
+   wrender.enabled = 1;
 
    v4_copy( (v4f){ 0.0f, 1.0f, 0.0f, height }, wrender.plane );
 }