3 static void render_terrain(m4x4f projection
, v3f camera
);
4 static void render_sky(m4x3f camera
);
14 #include "shaders/terrain.h"
15 #include "shaders/sky.h"
16 #include "shaders/planeinf.h"
18 vg_tex2d tex_terrain_colours
= { .path
= "textures/gradients.qoi",
19 .flags
= VG_TEXTURE_CLAMP
| VG_TEXTURE_NEAREST
21 vg_tex2d tex_terrain_noise
= { .path
= "textures/garbage.qoi",
22 .flags
= VG_TEXTURE_NEAREST
};
32 static void terrain_register(void)
34 shader_terrain_register();
35 shader_sky_register();
36 shader_planeinf_register();
39 static void terrain_init(void)
41 vg_tex2d_init( (vg_tex2d
*[]){ &tex_terrain_colours
,
42 &tex_terrain_noise
}, 2 );
45 model
*msky
= vg_asset_read("models/rs_skydome.mdl");
46 model_unpack( msky
, &trender
.skydome
);
48 trender
.dome_lower
= *submodel_get( msky
, "dome_lower" );
49 trender
.dome_upper
= *submodel_get( msky
, "dome_upper" );
54 static void bind_terrain_textures(void)
56 vg_tex2d_bind( &tex_terrain_noise
, 0 );
57 vg_tex2d_bind( &tex_terrain_colours
, 1 );
60 static void render_terrain(m4x4f projection
, v3f camera
)
63 shader_terrain_uTexGarbage(0);
64 shader_terrain_uTexGradients(1);
66 vg_tex2d_bind( &tex_terrain_noise
, 0 );
67 vg_tex2d_bind( &tex_terrain_colours
, 1 );
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
} );
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])} );
86 static void render_lowerdome( m4x3f camera
)
88 m4x4f projection
, full
;
89 pipeline_projection( projection
, 0.4f
, 1000.0f
);
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
);
97 m4x3f identity_matrix
;
98 m4x3_identity( identity_matrix
);
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()} );
106 submodel_draw( &trender
.dome_lower
);
109 static void render_sky(m4x3f camera
)
111 m4x4f projection
, full
;
112 pipeline_projection( projection
, 0.4f
, 1000.0f
);
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
);
120 m4x3f identity_matrix
;
121 m4x3_identity( identity_matrix
);
124 shader_sky_uMdl(identity_matrix
);
125 shader_sky_uPv(full
);
126 shader_sky_uTexGarbage(0);
127 shader_sky_uTime( vg_time
);
130 vg_tex2d_bind( &tex_terrain_noise
, 0 );
132 glDepthMask(GL_FALSE
);
133 glDisable(GL_DEPTH_TEST
);
135 mesh_bind( &trender
.skydome
);
136 submodel_draw( &trender
.dome_upper
);
138 glEnable(GL_DEPTH_TEST
);
139 glDepthMask(GL_TRUE
);