X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=world_render.c;h=950e35fe8855aa08ca12b1e649ecde3bd827a58f;hb=721322812d9fcfa648268aab34ec1879c9414dfe;hp=c4b24c4959df1f3808613f6a90f15773a3350155;hpb=6929408e937dca64da707a2d61f8cdf6ab857e93;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/world_render.c b/world_render.c index c4b24c4..950e35f 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(); @@ -153,7 +154,10 @@ struct world_pass{ void (*fn_set_uPvmPrev)( m4x4f pvm ); }; -VG_STATIC void world_render_if( world_instance *world, struct world_pass *pass ) +/* TODO: high level control pass renders. */ + +VG_STATIC +void world_render_if( world_instance *world, struct world_pass *pass ) { for( int i=0; isurface_count; i++ ){ struct world_surface *mat = &world->surfaces[i]; @@ -201,6 +205,20 @@ VG_STATIC void world_render_if( world_instance *world, struct world_pass *pass ) } } +VG_STATIC +void world_render_challenges( world_instance *world ){ + if( !world ) return; + + shader_scene_fxglow_use(); + for( u32 i=0; ient_challenge); i++ ){ + ent_challenge *challenge = mdl_arritm(&world->ent_challenge,i); + + m4x3f mmdl; + mdl_transform_m4x3( &challenge->transform, mmdl ); + shader_scene_fxglow_uMdl( mmdl ); + } +} + VG_STATIC void world_render_both_stages( world_instance *world, struct world_pass *pass ) { @@ -318,6 +336,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 ) { @@ -422,7 +472,7 @@ VG_STATIC void render_world_gates( world_instance *world, camera *cam, float dist = v3_dist2( gi->co[0], cam->transform[3] ); - vg_line_pt3( gi->co[0], 0.25f, VG__BLUE ); + vg_line_point( gi->co[0], 0.25f, VG__BLUE ); if( dist < closest ){ closest = dist; @@ -506,6 +556,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 ){