X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=world_render.c;h=25a993104e21faad7d6442dd9d9346bbe330f895;hb=4c673ebccdd6d12e2eb6c2804b79602da98ea8b1;hp=c4b24c4959df1f3808613f6a90f15773a3350155;hpb=6929408e937dca64da707a2d61f8cdf6ab857e93;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/world_render.c b/world_render.c index c4b24c4..25a9931 100644 --- a/world_render.c +++ b/world_render.c @@ -75,6 +75,7 @@ VG_STATIC void world_render_init(void) shader_scene_standard_register(); shader_scene_standard_alphatest_register(); + shader_scene_fxglow_register(); shader_scene_vertex_blend_register(); shader_scene_terrain_register(); shader_scene_depth_register(); @@ -318,6 +319,38 @@ VG_STATIC void render_world_alphatest( world_instance *world, camera *cam ) glEnable(GL_CULL_FACE); } +VG_STATIC void render_world_fxglow( world_instance *world, camera *cam ){ + glDrawBuffers( 1, (GLenum[]){ GL_COLOR_ATTACHMENT0 } ); + + shader_scene_fxglow_use(); + shader_scene_fxglow_uTexMain(1); + shader_scene_fxglow_uPv( cam->mtx.pv ); + + world_link_lighting_ub( world, _shader_scene_fxglow.id ); + world_bind_position_texture( world, _shader_scene_fxglow.id, + _uniform_scene_fxglow_g_world_depth, 2 ); + world_bind_light_array( world, _shader_scene_fxglow.id, + _uniform_scene_fxglow_uLightsArray, 3 ); + world_bind_light_index( world, _shader_scene_fxglow.id, + _uniform_scene_fxglow_uLightsIndex, 4 ); + + shader_scene_fxglow_uCamera( cam->transform[3] ); + glDisable(GL_CULL_FACE); + + struct world_pass pass = { + .shader = k_shader_fxglow, + .cam = cam, + .fn_bind_textures = bindpoint_diffuse_texture1, + .fn_set_mdl = shader_scene_fxglow_uMdl, + .fn_set_uPvmPrev = shader_scene_fxglow_uPvmPrev, + }; + + world_render_both_stages( world, &pass ); + + glEnable(GL_CULL_FACE); + glDrawBuffers( 2, (GLenum[]){ GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 } ); +} + VG_STATIC void bindpoint_terrain( world_instance *world, struct world_surface *mat ) { @@ -506,6 +539,7 @@ VG_STATIC void render_world( world_instance *world, camera *cam, render_world_standard( world, cam ); render_world_vb( world, cam ); render_world_alphatest( world, cam ); + render_world_fxglow( world, cam ); render_terrain( world, cam ); if( layer_depth == 0 ){