2 #include "vg/vg_engine.h"
3 #include "vg/vg_platform.h"
4 #include "vg/vg_framebuffer.h"
6 static void async_render_init( void *payload
, u32 size
)
8 f32 rh
= 0x1p
-4f
, ih
= 0.3f
;
11 0.00f
,0.00f
, 1.00f
,1.00f
, 0.00f
,1.00f
, /* fsquad */
12 0.00f
,0.00f
, 1.00f
,0.00f
, 1.00f
,1.00f
,
14 0.00f
,0.00f
, 1.00f
,rh
, 0.00f
,rh
, /* fsquad1 */
15 0.00f
,0.00f
, 1.00f
,0.00f
, 1.00f
,rh
,
16 0.00f
,1.00f
, 0.00f
,1.0f
-rh
,1.00f
,1.0f
-rh
,
17 0.00f
,1.00f
, 1.00f
,1.0f
-rh
,1.00f
,1.0f
,
21 0.00f
,0.00f
, 0.30f
,0.30f
, 0.00f
,0.30f
,
22 0.00f
,0.00f
, 0.30f
,0.00f
, 0.30f
,0.30f
,
23 0.30f
,0.00f
, 0.60f
,0.30f
, 0.30f
,0.30f
,
24 0.30f
,0.00f
, 0.60f
,0.00f
, 0.60f
,0.30f
,
25 0.60f
,0.00f
, 0.90f
,0.30f
, 0.60f
,0.30f
,
26 0.60f
,0.00f
, 0.90f
,0.00f
, 0.90f
,0.30f
,
28 0.00f
,0.30f
, 0.30f
,0.60f
, 0.00f
,0.60f
,
29 0.00f
,0.30f
, 0.30f
,0.30f
, 0.30f
,0.60f
,
30 0.30f
,0.30f
, 0.60f
,0.60f
, 0.30f
,0.60f
,
31 0.30f
,0.30f
, 0.60f
,0.30f
, 0.60f
,0.60f
,
32 0.60f
,0.30f
, 0.90f
,0.60f
, 0.60f
,0.60f
,
33 0.60f
,0.30f
, 0.90f
,0.30f
, 0.90f
,0.60f
,
35 0.00f
,0.60f
, 0.30f
,0.90f
, 0.00f
,0.90f
,
36 0.00f
,0.60f
, 0.30f
,0.60f
, 0.30f
,0.90f
,
37 0.30f
,0.60f
, 0.60f
,0.90f
, 0.30f
,0.90f
,
38 0.30f
,0.60f
, 0.60f
,0.60f
, 0.60f
,0.90f
,
39 0.60f
,0.60f
, 0.90f
,0.90f
, 0.60f
,0.90f
,
40 0.60f
,0.60f
, 0.90f
,0.60f
, 0.90f
,0.90f
,
42 0.00f
,ih
, 1.00f
,ih
+rh
, 0.00f
,ih
+rh
, /* fsquad2 */
43 0.00f
,ih
, 1.00f
,ih
, 1.00f
,ih
+rh
,
46 glGenVertexArrays( 1, &g_render
.fsquad
.vao
);
47 glGenBuffers( 1, &g_render
.fsquad
.vbo
);
48 glBindVertexArray( g_render
.fsquad
.vao
);
49 glBindBuffer( GL_ARRAY_BUFFER
, g_render
.fsquad
.vbo
);
50 glBufferData( GL_ARRAY_BUFFER
, sizeof(quad
), quad
, GL_STATIC_DRAW
);
51 glBindVertexArray( g_render
.fsquad
.vao
);
52 glVertexAttribPointer( 0, 2, GL_FLOAT
, GL_FALSE
,
53 sizeof(float)*2, (void*)0 );
54 glEnableVertexAttribArray( 0 );
58 glBindFramebuffer( GL_FRAMEBUFFER
, 0 );
62 void render_init(void)
64 vg_console_reg_var( "blur_strength", &k_blur_strength
, k_var_dtype_f32
, 0 );
65 vg_console_reg_var( "render_scale", &k_render_scale
,
66 k_var_dtype_f32
, VG_VAR_PERSISTENT
);
67 vg_console_reg_var( "fov", &k_fov
, k_var_dtype_f32
, VG_VAR_PERSISTENT
);
68 vg_console_reg_var( "cam_height", &k_cam_height
,
69 k_var_dtype_f32
, VG_VAR_PERSISTENT
);
70 vg_console_reg_var( "blur_effect", &k_blur_effect
,
71 k_var_dtype_i32
, VG_VAR_PERSISTENT
);
73 void *alloc
= vg_mem
.rtmemory
;
78 g_render
.fb_main
= vg_framebuffer_allocate( alloc
, 3, 1 );
79 g_render
.fb_main
->display_name
= "main";
80 g_render
.fb_main
->resolution_div
= 1;
81 g_render
.fb_main
->attachments
[0] = (vg_framebuffer_attachment
)
83 "colour", k_framebuffer_attachment_type_texture
,
85 .internalformat
= GL_RGB
,
87 .type
= GL_UNSIGNED_BYTE
,
88 .attachment
= GL_COLOR_ATTACHMENT0
90 g_render
.fb_main
->attachments
[1] = (vg_framebuffer_attachment
)
92 "motion", k_framebuffer_attachment_type_texture
,
94 .quality
= k_framebuffer_quality_high_only
,
95 .internalformat
= GL_RG16F
,
98 .attachment
= GL_COLOR_ATTACHMENT1
100 g_render
.fb_main
->attachments
[2] = (vg_framebuffer_attachment
)
102 "depth_stencil", k_framebuffer_attachment_type_texture_depth
,
103 .internalformat
= GL_DEPTH24_STENCIL8
,
104 .format
= GL_DEPTH_STENCIL
,
105 .type
= GL_UNSIGNED_INT_24_8
,
106 .attachment
= GL_DEPTH_STENCIL_ATTACHMENT
108 vg_framebuffer_create( g_render
.fb_main
);
113 g_render
.fb_water_reflection
= vg_framebuffer_allocate( alloc
, 2, 1 );
114 g_render
.fb_water_reflection
->display_name
= "water_reflection";
115 g_render
.fb_water_reflection
->resolution_div
= 2;
116 g_render
.fb_water_reflection
->attachments
[0] = (vg_framebuffer_attachment
)
118 "colour", k_framebuffer_attachment_type_texture
,
119 .internalformat
= GL_RGB
,
121 .type
= GL_UNSIGNED_BYTE
,
122 .attachment
= GL_COLOR_ATTACHMENT0
124 g_render
.fb_water_reflection
->attachments
[1] = (vg_framebuffer_attachment
)
126 "depth_stencil", k_framebuffer_attachment_type_renderbuffer
,
127 .internalformat
= GL_DEPTH24_STENCIL8
,
128 .attachment
= GL_DEPTH_STENCIL_ATTACHMENT
130 vg_framebuffer_create( g_render
.fb_water_reflection
);
133 * Thid rendered view from the perspective of the camera, but just
134 * captures stuff thats under the water
136 g_render
.fb_water_beneath
= vg_framebuffer_allocate( alloc
, 2, 1 );
137 g_render
.fb_water_beneath
->display_name
= "water_beneath";
138 g_render
.fb_water_beneath
->resolution_div
= 2;
139 g_render
.fb_water_beneath
->attachments
[0] = (vg_framebuffer_attachment
)
141 "colour", k_framebuffer_attachment_type_texture
,
142 .internalformat
= GL_RED
,
144 .type
= GL_UNSIGNED_BYTE
,
145 .attachment
= GL_COLOR_ATTACHMENT0
147 g_render
.fb_water_beneath
->attachments
[1] = (vg_framebuffer_attachment
)
149 "depth_stencil", k_framebuffer_attachment_type_renderbuffer
,
150 .internalformat
= GL_DEPTH24_STENCIL8
,
151 .attachment
= GL_DEPTH_STENCIL_ATTACHMENT
153 vg_framebuffer_create( g_render
.fb_water_beneath
);
158 g_render
.fb_workshop_preview
= vg_framebuffer_allocate( alloc
, 2, 1 );
159 g_render
.fb_workshop_preview
->display_name
= "workshop_preview";
160 g_render
.fb_workshop_preview
->resolution_div
= 0;
161 g_render
.fb_workshop_preview
->fixed_w
= WORKSHOP_PREVIEW_WIDTH
;
162 g_render
.fb_workshop_preview
->fixed_h
= WORKSHOP_PREVIEW_HEIGHT
;
163 g_render
.fb_workshop_preview
->attachments
[0] = (vg_framebuffer_attachment
)
165 "colour", k_framebuffer_attachment_type_texture
,
166 .internalformat
= GL_RGB
,
168 .type
= GL_UNSIGNED_BYTE
,
169 .attachment
= GL_COLOR_ATTACHMENT0
171 g_render
.fb_workshop_preview
->attachments
[1] = (vg_framebuffer_attachment
)
173 "depth_stencil", k_framebuffer_attachment_type_renderbuffer
,
174 .internalformat
= GL_DEPTH24_STENCIL8
,
175 .attachment
= GL_DEPTH_STENCIL_ATTACHMENT
177 vg_framebuffer_create( g_render
.fb_workshop_preview
);
182 g_render
.fb_network_status
= vg_framebuffer_allocate( alloc
, 1, 1 );
183 g_render
.fb_network_status
->display_name
= "network_status_ui";
184 g_render
.fb_network_status
->resolution_div
= 0;
185 g_render
.fb_network_status
->fixed_w
= 128;
186 g_render
.fb_network_status
->fixed_h
= 48;
187 g_render
.fb_network_status
->attachments
[0] = (vg_framebuffer_attachment
)
189 "colour", k_framebuffer_attachment_type_texture
,
190 .internalformat
= GL_RGB
,
192 .type
= GL_UNSIGNED_BYTE
,
193 .attachment
= GL_COLOR_ATTACHMENT0
195 vg_framebuffer_create( g_render
.fb_network_status
);
197 vg_async_call( async_render_init
, NULL
, 0 );
203 void render_fsquad(void)
205 glBindVertexArray( g_render
.fsquad
.vao
);
206 glDrawArrays( GL_TRIANGLES
, 0, 6 );
209 void render_fsquad1(void)
211 glBindVertexArray( g_render
.fsquad
.vao
);
212 glDrawArrays( GL_TRIANGLES
, 6, 6+6 );
215 void render_fsquad2(void)
217 glBindVertexArray( g_render
.fsquad
.vao
);
218 glDrawArrays( GL_TRIANGLES
, 66+6,6 );
221 void postprocess_to_screen( vg_framebuffer
*fb
)
223 glBindFramebuffer( GL_FRAMEBUFFER
, 0 );
224 glViewport( 0,0, vg
.window_x
, vg
.window_y
);
227 glDisable(GL_DEPTH_TEST
);
228 glBlendFunc(GL_ONE_MINUS_DST_ALPHA
, GL_DST_ALPHA
);
229 glBlendEquation(GL_FUNC_ADD
);
232 vg_framebuffer_inverse_ratio( fb
, inverse
);
236 shader_blitblur_use();
237 shader_blitblur_uTexMain( 0 );
238 shader_blitblur_uTexMotion( 1 );
239 shader_blitblur_uBlurStrength( k_blur_strength
/
240 (vg
.time_frame_delta
*60.0) );
241 shader_blitblur_uInverseRatio( inverse
);
243 inverse
[0] -= 0.0001f
;
244 inverse
[1] -= 0.0001f
;
245 shader_blitblur_uClampUv( inverse
);
246 shader_blitblur_uOverrideDir( g_render
.blur_override
);
248 vg_framebuffer_bind_texture( fb
, 0, 0 );
249 vg_framebuffer_bind_texture( fb
, 1, 1 );
254 shader_blit_uTexMain( 0 );
255 shader_blit_uInverseRatio( inverse
);
256 vg_framebuffer_bind_texture( fb
, 0, 0 );