X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=world_render.c;h=aa74bbfb6a2f6c4ab7e045348795cc33dd67eb43;hb=8090b8da9ce1397ba47d7e2d91b4f1716f708f25;hp=37b095c7bd8939816e4d30115e06dc1018baab68;hpb=22f62f001f21d1b91fefd9fc495c122d9ddf205a;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/world_render.c b/world_render.c index 37b095c..aa74bbf 100644 --- a/world_render.c +++ b/world_render.c @@ -12,20 +12,18 @@ #include "respawn.h" static int ccmd_set_time( int argc, const char *argv[] ){ - if( argc == 1 ){ - world_instance *world = world_current_instance(); + world_instance *world = world_current_instance(); + if( argc == 1 ) world->time = atof( argv[0] ); - } - else { - vg_error( "Usage set_time <0-1.0>\n" ); - } + else + vg_error( "Usage set_time <0-1.0> (current time: %f)\n", world->time ); return 0; } static void async_world_render_init( void *payload, u32 size ) { vg_info( "Allocate uniform buffers\n" ); - for( int i=0; i<4; i++ ){ + for( int i=0; iubo_bind_point = i; @@ -39,7 +37,7 @@ static void async_world_render_init( void *payload, u32 size ) } vg_info( "Allocate frame buffers\n" ); - for( int i=0; i<4; i++ ){ + for( int i=0; iheightmap; @@ -104,24 +102,21 @@ static void world_render_init(void) vg_async_call( async_world_render_init, NULL, 0 ); } -static void world_link_lighting_ub( world_instance *world, GLuint shader ) -{ +static void world_link_lighting_ub( world_instance *world, GLuint shader ){ GLuint idx = glGetUniformBlockIndex( shader, "ub_world_lighting" ); glUniformBlockBinding( shader, idx, world->ubo_bind_point ); } static void world_bind_position_texture( world_instance *world, GLuint shader, GLuint location, - int slot ) -{ + int slot ){ render_fb_bind_texture( &world->heightmap, 0, slot ); glUniform1i( location, slot ); } static void world_bind_light_array( world_instance *world, GLuint shader, GLuint location, - int slot ) -{ + int slot ){ glActiveTexture( GL_TEXTURE0 + slot ); glBindTexture( GL_TEXTURE_BUFFER, world->tex_light_entities ); glUniform1i( location, slot ); @@ -129,8 +124,7 @@ static void world_bind_light_array( world_instance *world, static void world_bind_light_index( world_instance *world, GLuint shader, GLuint location, - int slot ) -{ + int slot ){ glActiveTexture( GL_TEXTURE0 + slot ); glBindTexture( GL_TEXTURE_3D, world->tex_light_cubes ); glUniform1i( location, slot ); @@ -142,8 +136,7 @@ static void render_world_depth( world_instance *world, camera *cam ); * Rendering */ -static void bind_terrain_noise(void) -{ +static void bind_terrain_noise(void){ glActiveTexture( GL_TEXTURE0 ); glBindTexture( GL_TEXTURE_2D, world_render.tex_terrain_noise ); } @@ -268,8 +261,7 @@ static void bindpoint_diffuse1_and_cubemap10( world_instance *world, shader_scene_cubemapped_uColour( mat->info.colour ); } -static void render_world_vb( world_instance *world, camera *cam ) -{ +static void render_world_vb( world_instance *world, camera *cam ){ shader_scene_vertex_blend_use(); shader_scene_vertex_blend_uTexGarbage(0); shader_scene_vertex_blend_uTexGradients(1); @@ -529,30 +521,7 @@ void world_render_challenges( world_instance *world, struct world_pass *pass, } /* render texts */ - shader_scene_font_use(); - shader_scene_font_uTexGarbage(0); - shader_scene_font_uTexMain(1); - - shader_scene_font_uPv( skaterift.cam.mtx.pv ); - shader_scene_font_uTime( vg.time ); - - /* TODO: Code dupe... */ - world_link_lighting_ub( world, _shader_scene_font.id ); - world_bind_position_texture( world, _shader_scene_font.id, - _uniform_scene_font_g_world_depth, 2 ); - world_bind_light_array( world, _shader_scene_font.id, - _uniform_scene_font_uLightsArray, 3 ); - world_bind_light_index( world, _shader_scene_font.id, - _uniform_scene_font_uLightsIndex, 4 ); - - bind_terrain_noise(); - shader_scene_font_uCamera( skaterift.cam.transform[3] ); - - //shader_scene_font_uColour( (v4f){1.0f,1.0f,1.0f,1.0f} ); - glActiveTexture( GL_TEXTURE1 ); - glBindTexture( GL_TEXTURE_2D, gui.font.texture ); - - mesh_bind( &gui.font.mesh ); + font3d_bind( &gui.font, k_font_shader_world, 0, world, &skaterift.cam ); char buf[32]; u32 count = 0; @@ -568,7 +537,7 @@ void world_render_challenges( world_instance *world, struct world_pass *pass, c+=highscore_intl( buf+c, mdl_arrcount(&world->ent_challenge), 3 ); buf[c++] = '\0'; - f32 w = font3d_string_width( &gui.font, 1, buf ); + f32 w = font3d_string_width( 1, buf ); m4x3f mlocal; m3x3_identity( mlocal ); mlocal[3][0] = -w*0.5f; @@ -593,15 +562,7 @@ void world_render_challenges( world_instance *world, struct world_pass *pass, shader_scene_font_uOpacity( scale ); shader_scene_font_uColourize( colour ); - - struct font3d_render render = { - .font = &gui.font, - .variant_id = 1, - .shader = k_font_shader_world - }; - - font3d_begin( buf, &skaterift.cam, mmdl, &render ); - font3d_draw( &render ); + font3d_simple_draw( 1, buf, &skaterift.cam, mmdl ); } } @@ -659,20 +620,12 @@ static void bindpoint_override( world_instance *world, } } -static void render_terrain( world_instance *world, camera *cam ) -{ +static void render_terrain( world_instance *world, camera *cam ){ shader_scene_terrain_use(); shader_scene_terrain_uTexGarbage(0); shader_scene_terrain_uTexGradients(1); - world_link_lighting_ub( world, _shader_scene_terrain.id ); - world_bind_position_texture( world, _shader_scene_terrain.id, - _uniform_scene_terrain_g_world_depth, 2 ); - world_bind_light_array( world, _shader_scene_terrain.id, - _uniform_scene_terrain_uLightsArray, 3 ); - world_bind_light_index( world, _shader_scene_terrain.id, - _uniform_scene_terrain_uLightsIndex, 4 ); - + WORLD_BIND_LIGHT_BUFFERS_UB0_TEX234( world, scene_terrain ); glActiveTexture( GL_TEXTURE0 ); glBindTexture( GL_TEXTURE_2D, world_render.tex_terrain_noise ); @@ -780,12 +733,10 @@ static void render_world_gates( world_instance *world, camera *cam, } } -static void world_prerender( world_instance *world ) -{ - +static void world_prerender( world_instance *world ){ if( mdl_arrcount( &world->ent_light ) ){ f32 rate = vg_maxf(0.1f, fabsf(k_day_length)) * vg_signf(k_day_length); - world->time += vg.time_delta * (1.0/(rate*60.0)); + world->time += vg.time_frame_delta * (1.0/(rate*60.0)); } else{ world->time = 0.834; @@ -934,14 +885,7 @@ static void render_world_override( world_instance *world ){ shader_scene_override_uTexMain(1); shader_scene_override_uPv( pass.cam->mtx.pv ); - world_link_lighting_ub( world, _shader_scene_override.id ); - world_bind_position_texture( world, _shader_scene_override.id, - _uniform_scene_override_g_world_depth, 2 ); - world_bind_light_array( world, _shader_scene_override.id, - _uniform_scene_override_uLightsArray, 3 ); - world_bind_light_index( world, _shader_scene_override.id, - _uniform_scene_override_uLightsIndex, 4 ); - + WORLD_BIND_LIGHT_BUFFERS_UB0_TEX234( world, scene_override ); bind_terrain_noise(); shader_scene_override_uCamera( pass.cam->transform[3] ); @@ -1021,8 +965,7 @@ static void render_world_cubemaps( world_instance *world ){ } } -static void render_world_depth( world_instance *world, camera *cam ) -{ +static void render_world_depth( world_instance *world, camera *cam ){ m4x3f identity_matrix; m4x3_identity( identity_matrix ); @@ -1037,8 +980,7 @@ static void render_world_depth( world_instance *world, camera *cam ) mesh_draw( &world->mesh_geo ); } -static void render_world_position( world_instance *world, camera *cam ) -{ +static void render_world_position( world_instance *world, camera *cam ){ m4x3f identity_matrix; m4x3_identity( identity_matrix );