3 static void render_terrain(m4x4f projection
, v3f camera
);
4 static void render_sky(m4x3f camera
);
13 #include "shaders/terrain.h"
14 #include "shaders/sky.h"
15 #include "shaders/planeinf.h"
17 vg_tex2d tex_terrain_colours
= { .path
= "textures/gradients.qoi",
18 .flags
= VG_TEXTURE_CLAMP
| VG_TEXTURE_NEAREST
20 vg_tex2d tex_terrain_noise
= { .path
= "textures/garbage.qoi",
21 .flags
= VG_TEXTURE_NEAREST
};
31 static void terrain_register(void)
33 shader_terrain_register();
34 shader_sky_register();
35 shader_planeinf_register();
38 static void terrain_init(void)
40 vg_tex2d_init( (vg_tex2d
*[]){ &tex_terrain_colours
,
41 &tex_terrain_noise
}, 2 );
44 model
*msky
= vg_asset_read("models/rs_skydome.mdl");
45 model_unpack( msky
, &trender
.skydome
);
47 trender
.dome_lower
= *submodel_get( msky
, "dome_lower" );
48 trender
.dome_upper
= *submodel_get( msky
, "dome_upper" );
53 static void render_terrain(m4x4f projection
, v3f camera
)
56 shader_terrain_uTexGarbage(0);
57 shader_terrain_uTexGradients(1);
59 vg_tex2d_bind( &tex_terrain_noise
, 0 );
60 vg_tex2d_bind( &tex_terrain_colours
, 1 );
62 m4x3f identity_matrix
;
63 m4x3_identity( identity_matrix
);
64 shader_terrain_uPv( projection
);
65 shader_terrain_uMdl( identity_matrix
);
66 shader_terrain_uCamera( camera
);
67 shader_terrain_uPlane( (v4f
){ 0.0f
,1.0f
,0.0f
, wrender
.height
} );
70 static void render_lowerdome( m4x3f camera
)
72 m4x4f projection
, full
;
73 pipeline_projection( projection
, 0.4f
, 1000.0f
);
76 m3x3_transpose( camera
, inverse
);
77 v3_copy((v3f
){0.0f
,0.0f
,0.0f
}, inverse
[3]);
78 m4x3_expand( inverse
, full
);
79 m4x4_mul( projection
, full
, full
);
81 m4x3f identity_matrix
;
82 m4x3_identity( identity_matrix
);
84 shader_planeinf_use();
85 shader_planeinf_uMdl(identity_matrix
);
86 shader_planeinf_uPv(full
);
87 shader_planeinf_uCamera(camera
[3]);
88 shader_planeinf_uPlane( (v4f
){0.0f
,1.0f
,0.0f
, water_height()} );
90 submodel_draw( &trender
.dome_lower
);
93 static void render_sky(m4x3f camera
)
95 m4x4f projection
, full
;
96 pipeline_projection( projection
, 0.4f
, 1000.0f
);
99 m3x3_transpose( camera
, inverse
);
100 v3_copy((v3f
){0.0f
,0.0f
,0.0f
}, inverse
[3]);
101 m4x3_expand( inverse
, full
);
102 m4x4_mul( projection
, full
, full
);
104 m4x3f identity_matrix
;
105 m4x3_identity( identity_matrix
);
108 shader_sky_uMdl(identity_matrix
);
109 shader_sky_uPv(full
);
110 shader_sky_uTexGarbage(0);
111 shader_sky_uTime( vg_time
);
114 vg_tex2d_bind( &tex_terrain_noise
, 0 );
116 glDepthMask(GL_FALSE
);
117 glDisable(GL_DEPTH_TEST
);
119 mesh_bind( &trender
.skydome
);
120 submodel_draw( &trender
.dome_upper
);
122 glEnable(GL_DEPTH_TEST
);
123 glDepthMask(GL_TRUE
);