Fix major overstep with last commit
[carveJwlIkooP6JGAAIwe30JlM.git] / terrain.h
index d35dc0ab0f39ffdaa3c57b53bb891d86b48ee124..b5e7e5333b555efa6f851699242e6533a977578d 100644 (file)
--- a/terrain.h
+++ b/terrain.h
@@ -3,6 +3,7 @@
 static void render_terrain(m4x4f projection, v3f camera);
 static void render_sky(m4x3f camera);
 
+#if 0
 #ifndef TERRAIN_H
 #define TERRAIN_H
 
@@ -12,6 +13,7 @@ static void render_sky(m4x3f camera);
 
 #include "shaders/terrain.h"
 #include "shaders/sky.h"
+#include "shaders/planeinf.h"
 
 vg_tex2d tex_terrain_colours = { .path = "textures/gradients.qoi",
                                  .flags = VG_TEXTURE_CLAMP | VG_TEXTURE_NEAREST
@@ -22,6 +24,8 @@ vg_tex2d tex_terrain_noise = { .path = "textures/garbage.qoi",
 static struct
 {
    glmesh skydome;
+   submodel dome_upper,
+            dome_lower;
 }
 trender;
 
@@ -29,6 +33,7 @@ static void terrain_register(void)
 {
    shader_terrain_register();
    shader_sky_register();
+   shader_planeinf_register();
 }
 
 static void terrain_init(void)
@@ -39,9 +44,19 @@ static void terrain_init(void)
 
    model *msky = vg_asset_read("models/rs_skydome.mdl");
    model_unpack( msky, &trender.skydome );
+   
+   trender.dome_lower = *submodel_get( msky, "dome_lower" );
+   trender.dome_upper = *submodel_get( msky, "dome_upper" );
+
    free(msky);
 }
 
+static void bind_terrain_textures(void)
+{
+   vg_tex2d_bind( &tex_terrain_noise, 0 );
+   vg_tex2d_bind( &tex_terrain_colours, 1 );
+}
+
 static void render_terrain(m4x4f projection, v3f camera)
 {
    shader_terrain_use();
@@ -57,6 +72,38 @@ static void render_terrain(m4x4f projection, v3f camera)
    shader_terrain_uMdl( identity_matrix );
    shader_terrain_uCamera( camera );
    shader_terrain_uPlane( (v4f){ 0.0f,1.0f,0.0f, wrender.height } );
+
+   glActiveTexture( GL_TEXTURE2 );
+   glBindTexture( GL_TEXTURE_2D, wrender.depthmap );
+   shader_terrain_uTexDepth( 2 );
+   shader_terrain_uDepthBounds( (v4f){ 
+         wrender.depthbounds[0][0],
+         wrender.depthbounds[0][2],
+         1.0f/ (wrender.depthbounds[1][0]-wrender.depthbounds[0][0]),
+         1.0f/ (wrender.depthbounds[1][2]-wrender.depthbounds[0][2])} );
+}
+
+static void render_lowerdome( m4x3f camera )
+{
+   m4x4f projection, full;
+   pipeline_projection( projection, 0.4f, 1000.0f );
+
+   m4x3f inverse;
+   m3x3_transpose( camera, inverse );
+   v3_copy((v3f){0.0f,0.0f,0.0f}, inverse[3]);
+   m4x3_expand( inverse, full );
+   m4x4_mul( projection, full, full );
+
+   m4x3f identity_matrix;
+   m4x3_identity( identity_matrix );
+   
+   shader_planeinf_use();
+   shader_planeinf_uMdl(identity_matrix);
+   shader_planeinf_uPv(full);
+   shader_planeinf_uCamera(camera[3]);
+   shader_planeinf_uPlane( (v4f){0.0f,1.0f,0.0f, water_height()} );
+
+   submodel_draw( &trender.dome_lower );
 }
 
 static void render_sky(m4x3f camera)
@@ -78,16 +125,19 @@ static void render_sky(m4x3f camera)
    shader_sky_uPv(full);
    shader_sky_uTexGarbage(0);
    shader_sky_uTime( vg_time );
+
+
    vg_tex2d_bind( &tex_terrain_noise, 0 );
 
    glDepthMask(GL_FALSE);
    glDisable(GL_DEPTH_TEST);
 
    mesh_bind( &trender.skydome );
-   mesh_draw( &trender.skydome );
-
+   submodel_draw( &trender.dome_upper );
+   
    glEnable(GL_DEPTH_TEST);
    glDepthMask(GL_TRUE);
 }
 
 #endif
+#endif