Fix major overstep with last commit
[carveJwlIkooP6JGAAIwe30JlM.git] / terrain.h
1 #include "common.h"
2
3 static void render_terrain(m4x4f projection, v3f camera);
4 static void render_sky(m4x3f camera);
5
6 #if 0
7 #ifndef TERRAIN_H
8 #define TERRAIN_H
9
10 #include "model.h"
11 #include "render.h"
12 #include "water.h"
13
14 #include "shaders/terrain.h"
15 #include "shaders/sky.h"
16 #include "shaders/planeinf.h"
17
18 vg_tex2d tex_terrain_colours = { .path = "textures/gradients.qoi",
19 .flags = VG_TEXTURE_CLAMP | VG_TEXTURE_NEAREST
20 };
21 vg_tex2d tex_terrain_noise = { .path = "textures/garbage.qoi",
22 .flags = VG_TEXTURE_NEAREST };
23
24 static struct
25 {
26 glmesh skydome;
27 submodel dome_upper,
28 dome_lower;
29 }
30 trender;
31
32 static void terrain_register(void)
33 {
34 shader_terrain_register();
35 shader_sky_register();
36 shader_planeinf_register();
37 }
38
39 static void terrain_init(void)
40 {
41 vg_tex2d_init( (vg_tex2d *[]){ &tex_terrain_colours,
42 &tex_terrain_noise }, 2 );
43
44
45 model *msky = vg_asset_read("models/rs_skydome.mdl");
46 model_unpack( msky, &trender.skydome );
47
48 trender.dome_lower = *submodel_get( msky, "dome_lower" );
49 trender.dome_upper = *submodel_get( msky, "dome_upper" );
50
51 free(msky);
52 }
53
54 static void bind_terrain_textures(void)
55 {
56 vg_tex2d_bind( &tex_terrain_noise, 0 );
57 vg_tex2d_bind( &tex_terrain_colours, 1 );
58 }
59
60 static void render_terrain(m4x4f projection, v3f camera)
61 {
62 shader_terrain_use();
63 shader_terrain_uTexGarbage(0);
64 shader_terrain_uTexGradients(1);
65
66 vg_tex2d_bind( &tex_terrain_noise, 0 );
67 vg_tex2d_bind( &tex_terrain_colours, 1 );
68
69 m4x3f identity_matrix;
70 m4x3_identity( identity_matrix );
71 shader_terrain_uPv( projection );
72 shader_terrain_uMdl( identity_matrix );
73 shader_terrain_uCamera( camera );
74 shader_terrain_uPlane( (v4f){ 0.0f,1.0f,0.0f, wrender.height } );
75
76 glActiveTexture( GL_TEXTURE2 );
77 glBindTexture( GL_TEXTURE_2D, wrender.depthmap );
78 shader_terrain_uTexDepth( 2 );
79 shader_terrain_uDepthBounds( (v4f){
80 wrender.depthbounds[0][0],
81 wrender.depthbounds[0][2],
82 1.0f/ (wrender.depthbounds[1][0]-wrender.depthbounds[0][0]),
83 1.0f/ (wrender.depthbounds[1][2]-wrender.depthbounds[0][2])} );
84 }
85
86 static void render_lowerdome( m4x3f camera )
87 {
88 m4x4f projection, full;
89 pipeline_projection( projection, 0.4f, 1000.0f );
90
91 m4x3f inverse;
92 m3x3_transpose( camera, inverse );
93 v3_copy((v3f){0.0f,0.0f,0.0f}, inverse[3]);
94 m4x3_expand( inverse, full );
95 m4x4_mul( projection, full, full );
96
97 m4x3f identity_matrix;
98 m4x3_identity( identity_matrix );
99
100 shader_planeinf_use();
101 shader_planeinf_uMdl(identity_matrix);
102 shader_planeinf_uPv(full);
103 shader_planeinf_uCamera(camera[3]);
104 shader_planeinf_uPlane( (v4f){0.0f,1.0f,0.0f, water_height()} );
105
106 submodel_draw( &trender.dome_lower );
107 }
108
109 static void render_sky(m4x3f camera)
110 {
111 m4x4f projection, full;
112 pipeline_projection( projection, 0.4f, 1000.0f );
113
114 m4x3f inverse;
115 m3x3_transpose( camera, inverse );
116 v3_copy((v3f){0.0f,0.0f,0.0f}, inverse[3]);
117 m4x3_expand( inverse, full );
118 m4x4_mul( projection, full, full );
119
120 m4x3f identity_matrix;
121 m4x3_identity( identity_matrix );
122
123 shader_sky_use();
124 shader_sky_uMdl(identity_matrix);
125 shader_sky_uPv(full);
126 shader_sky_uTexGarbage(0);
127 shader_sky_uTime( vg_time );
128
129
130 vg_tex2d_bind( &tex_terrain_noise, 0 );
131
132 glDepthMask(GL_FALSE);
133 glDisable(GL_DEPTH_TEST);
134
135 mesh_bind( &trender.skydome );
136 submodel_draw( &trender.dome_upper );
137
138 glEnable(GL_DEPTH_TEST);
139 glDepthMask(GL_TRUE);
140 }
141
142 #endif
143 #endif