957f2021c3cfedc7b34513dd8b503ad027b31f96
9 #include "shaders/water.h"
11 vg_tex2d tex_water_surf
= { .path
= "textures/water_surf.qoi" };
22 static void water_register(void)
24 shader_water_register();
27 static void water_init(void)
29 create_renderbuffer_std( &wrender
.fb
, &wrender
.rgb
, &wrender
.rb
);
32 static void water_set_surface( glmesh
*surf
, float height
)
35 wrender
.height
= height
;
38 static void water_fb_resize(void)
40 resize_renderbuffer_std( &wrender
.fb
, &wrender
.rgb
, &wrender
.rb
);
43 static void render_water_texture( m4x3f camera
)
45 /* Draw reflection buffa */
46 glBindFramebuffer( GL_FRAMEBUFFER
, wrender
.fb
);
47 glClearColor( 0.11f
, 0.35f
, 0.37f
, 1.0f
);
48 glClear( GL_COLOR_BUFFER_BIT
|GL_DEPTH_BUFFER_BIT
);
50 m4x3f new_cam
, inverse
;
51 v3_copy( camera
[3], new_cam
[3] );
52 new_cam
[3][1] -= 2.0f
* (camera
[3][1] - wrender
.height
);
55 m3x3_identity( flip
);
57 m3x3_mul( flip
, camera
, new_cam
);
61 m3x3_mulv( new_cam
, (v3f
){0.0f
,0.0f
,-1.0f
}, p0
);
62 v3_add( new_cam
[3], p0
, p0
);
63 vg_line( new_cam
[3], p0
, 0xffffffff );
66 vg_line_pt3( new_cam
[3], 0.3f
, 0xff00ffff );
68 m4x3_invert_affine( new_cam
, inverse
);
69 m4x3_expand( inverse
, view
);
71 v4f clippa
= { 0.0f
, 1.0f
, 0.0f
, wrender
.height
-0.1f
};
72 m4x3_mulp( inverse
, clippa
, clippa
);
76 m4x4_projection( projection
,
78 (float)vg_window_x
/ (float)vg_window_y
,
80 plane_clip_projection( projection
, clippa
);
81 m4x4_mul( projection
, view
, projection
);
83 glCullFace( GL_FRONT
);
84 render_world( projection
, new_cam
);
85 glCullFace( GL_BACK
);
88 static void render_water_surface( m4x4f pv
)
93 glActiveTexture( GL_TEXTURE0
);
94 glBindTexture( GL_TEXTURE_2D
, wrender
.rgb
);
95 shader_water_uTexMain( 0 );
97 vg_tex2d_bind( &tex_water_surf
, 1 );
98 shader_water_uTexDudv( 1 );
99 shader_water_uInvRes( (v2f
){
100 1.0f
/ (float)vg_window_x
,
101 1.0f
/ (float)vg_window_y
});
103 shader_water_uTime( vg_time
);
104 shader_water_uPv( pv
);
107 m4x3_identity( full
);
108 full
[3][1] = wrender
.height
;
110 shader_water_uMdl( full
);
112 mesh_bind( &wrender
.mdl
);
113 mesh_draw( &wrender
.mdl
);