From b888cce683d95cc01d0b4be9bbe92a0dd47452ac Mon Sep 17 00:00:00 2001 From: hgn Date: Thu, 6 Apr 2023 14:41:44 +0100 Subject: [PATCH] variable scale menu --- common.h | 3 -- menu.h | 29 ++++++++++--- models_src/rs_menu.mdl | Bin 822872 -> 832272 bytes render.h | 92 +++++++++++++++++++--------------------- shaders/blit.h | 9 +++- shaders/blit.vs | 4 +- shaders/blitblur.h | 9 +++- shaders/blitcolour.h | 9 +++- skaterift.c | 93 +++++------------------------------------ world_gate.h | 2 +- world_gen.h | 2 +- world_water.h | 6 +-- 12 files changed, 109 insertions(+), 149 deletions(-) diff --git a/common.h b/common.h index 24c7815..9eda6f6 100644 --- a/common.h +++ b/common.h @@ -120,9 +120,6 @@ VG_STATIC int k_debug_light_indices = 0, k_debug_light_complexity = 0, k_light_preview = 0; -VG_STATIC int g_render_x = 1, - g_render_y = 1; - VG_STATIC int freecam = 0; VG_STATIC int walk_grid_iterations = 1; VG_STATIC float fc_speed = 10.0f; diff --git a/menu.h b/menu.h index bcd6141..4318e62 100644 --- a/menu.h +++ b/menu.h @@ -49,13 +49,16 @@ VG_STATIC void menu_btn_settings( int event ); VG_STATIC void menu_btn_invert_y( int event ); VG_STATIC mdl_mesh *menu_mesh_fov_slider, - *menu_mesh_vol_slider; + *menu_mesh_vol_slider, + *menu_mesh_res_slider; VG_STATIC ent_marker *menu_mark_fov_min, *menu_mark_fov_max, *menu_mark_vol_min, - *menu_mark_vol_max; + *menu_mark_vol_max, + *menu_mark_res_min, + *menu_mark_res_max; struct{ /* state */ @@ -188,7 +191,7 @@ VG_STATIC menu_buttons[] = { "vol_slider", menu_vis, {k_menu_page_settings}, - .lu="text_blur" + .lu="res_slider" }, { "vol_info", menu_vis, {k_menu_page_settings} }, @@ -203,12 +206,18 @@ VG_STATIC menu_buttons[] = { "text_blur", menu_vis, {k_menu_page_settings}, .fn_press = menu_btn_blur, - .lu="text_invert_y", .ld="vol_slider" + .lu="text_invert_y", .ld="res_slider" }, { "text_blur_check", menu_settings_if, {.ptr_generic=&cl_blur} }, - +{ + "res_slider", menu_vis, {k_menu_page_settings}, + .ld = "vol_slider", .lu = "text_blur" +}, +{ + "res_info", menu_vis, {k_menu_page_settings}, +}, { "ctr_xbox", menu_controller_inf, {k_menu_controller_type_xbox}}, { "ctr_xbox_text", menu_controller_inf, {k_menu_controller_type_xbox}}, { "ctr_steam", menu_controller_inf, {k_menu_controller_type_steam}}, @@ -404,9 +413,14 @@ VG_STATIC void menu_init(void) ent_find_marker( &menu_model, &menu_markers, "vol_slider_max" ); menu_mark_vol_min = ent_find_marker( &menu_model, &menu_markers, "vol_slider_min" ); + menu_mark_res_max = + ent_find_marker( &menu_model, &menu_markers, "res_slider_max" ); + menu_mark_res_min = + ent_find_marker( &menu_model, &menu_markers, "res_slider_min" ); menu_mesh_fov_slider = mdl_find_mesh( &menu_model, "fov_slider" ); menu_mesh_vol_slider = mdl_find_mesh( &menu_model, "vol_slider" ); + menu_mesh_res_slider = mdl_find_mesh( &menu_model, "res_slider" ); shader_model_menu_register(); @@ -615,6 +629,11 @@ VG_STATIC void menu_page_settings(void) menu_mesh_vol_slider, menu_mark_vol_min->transform.co, menu_mark_vol_max->transform.co ); + menu_slider( &gpipeline.view_render_scale, + (game_menu.loc == menu_get_loc( "res_slider" )), + menu_mesh_res_slider, menu_mark_res_min->transform.co, + menu_mark_res_max->transform.co ); + if( menu_page_should_backout() ){ game_menu.page = k_menu_page_main; game_menu.loc = menu_get_loc( "text_settings" ); diff --git a/models_src/rs_menu.mdl b/models_src/rs_menu.mdl index 2bcc670a270d70b71feb55d51abd21a47ab373b3..18c6db322b00ab8a34f40df8b7971e97c87e9f74 100644 GIT binary patch delta 8878 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 delta 416 zcmbR6%;?4(qX{aqI~W-lfQX^Eq$o2ly%@-X01svc2APSD;;c6~85pD{#)?}7@Ih4C z02Sn>QbAG-3-~6klVSprr=+YF0M)So#dLr; zHLnC{Mp1TZ5l9sSLjXU7hMAF=mkG2YGd~Y3H(8ERiVdWs$7-@2qnO+TPHqOHM2Kl1 z*JS3UWF|u_WQge7T*Nqyak2ul!{!F&3Kr(mKkiNb&2Gu;z_@?1Ifo_lyy*ugt8;2j zp2H!)Y*RmP@_LSq?9mJ7*$WoQO}@{mI=P2afca4J`pNS-Etv&&ubX_E({ytOR|U&t z1O5<>a;t;(D(4dHCJPA2a904sZo2O(`w!BGCUXlYGImV9%CF5hV=|+FHsgxsR)O|b v0Y)HZ0%B$$W&vVWAZ7z%b|B^eV$SWY0$k3&Cdcq|v=?Y_Z!gf`InV+C2a<3Q diff --git a/render.h b/render.h index e7220b0..712961e 100644 --- a/render.h +++ b/render.h @@ -28,7 +28,6 @@ VG_STATIC void render_world_depth( world_instance *world, camera *cam ); typedef struct framebuffer framebuffer; - /* * All standard buffers used in rendering */ @@ -39,49 +38,22 @@ VG_STATIC struct pipeline framebuffer *fb_main, *fb_water_reflection, *fb_water_beneath; - - struct light_widget - { - int enabled; - v2f dir; - v3f colour; - } - widgets[3]; - - float shadow_spread, shadow_length; - int ready; + + float view_render_scale, + water_render_scale; } -gpipeline = -{ - .widgets = - { - { - .enabled = 1, - .colour = { 1.36f, 1.35f, 1.01f }, - .dir = { 0.63f, -0.08f } - }, - { - .enabled = 1, - .colour = { 0.33f, 0.56f, 0.64f }, - .dir = { -2.60f, -0.13f } - }, - { - .enabled = 1, - .colour = { 0.05f, 0.05f, 0.23f }, - .dir = { 2.60f, -0.84f } - } - }, - .shadow_spread = 0.65f, - .shadow_length = 9.50f, -}; +gpipeline = { .view_render_scale = 1.0f }; struct framebuffer { const char *display_name; - int resolution_div, + int resolution_div, /* definition */ fixed_w, - fixed_h; + fixed_h, + + render_w, /* runtime */ + render_h; struct framebuffer_attachment { @@ -209,25 +181,46 @@ framebuffers[] = VG_STATIC void render_fb_get_current_res( struct framebuffer *fb, int *x, int *y ) { - if( fb->resolution_div ) - { + if( fb->resolution_div ){ *x = vg.window_x / fb->resolution_div; *y = vg.window_y / fb->resolution_div; } - else - { + else{ *x = fb->fixed_w; *y = fb->fixed_h; } } +VG_STATIC void render_fb_inverse_ratio( framebuffer *fb, v2f inverse ) +{ + int x, y; + render_fb_get_current_res( fb, &x, &y ); + + v2f render = { fb->render_w, fb->render_h }, + original = { x, y }; + + v2_div( render, original, inverse ); +} + /* * Bind framebuffer for drawing to */ -VG_STATIC void render_fb_bind( framebuffer *fb ) +VG_STATIC void render_fb_bind( framebuffer *fb, int use_scaling ) { int x, y; render_fb_get_current_res( fb, &x, &y ); + + if( use_scaling ){ + x = gpipeline.view_render_scale*(float)x; + y = gpipeline.view_render_scale*(float)y; + + x = VG_MAX( 16, x ); + y = VG_MAX( 16, y ); + + fb->render_w = x; + fb->render_h = y; + } + glBindFramebuffer( GL_FRAMEBUFFER, fb->fb ); glViewport( 0, 0, x, y ); } @@ -612,13 +605,14 @@ VG_STATIC void render_view_framebuffer_ui(void) glBindVertexArray( gpipeline.fsquad.vao ); shader_blit_use(); shader_blit_uTexMain( 0 ); + + v2f identity = { 1.0f, 1.0f }; + shader_blit_uInverseRatio( identity ); - for( int i=0; iattachments); j++ ) - { + for( int j=0; jattachments); j++ ){ struct framebuffer_attachment *at = &fb->attachments[j]; if( !at->debug_view ) @@ -638,16 +632,14 @@ VG_STATIC void render_view_framebuffer_ui(void) ui_text( (ui_rect){ corner[0], corner[1] + 32, 0.0f, 0.0f, }, at->display_name, 1, k_text_align_left ); - if( at->purpose == k_framebuffer_attachment_type_renderbuffer ) - { + if( at->purpose == k_framebuffer_attachment_type_renderbuffer ){ v2f center; v2_muladds( corner, window, 0.15f, center ); ui_text( (ui_rect){ center[0], center[1], 0.0f, 0.0f }, "", 1, k_text_align_center ); } - else - { + else{ render_fb_bind_texture( fb, j, 0 ); int start = (viewing_count+2) * 6, diff --git a/shaders/blit.h b/shaders/blit.h index 12a0dcb..116007a 100644 --- a/shaders/blit.h +++ b/shaders/blit.h @@ -12,10 +12,12 @@ static struct vg_shader _shader_blit = { "layout (location=0) in vec2 a_co;\n" "out vec2 aUv;\n" "\n" +"uniform vec2 uInverseRatio;\n" +"\n" "void main()\n" "{\n" " gl_Position = vec4(a_co*2.0-1.0,0.0,1.0);\n" -" aUv = a_co;\n" +" aUv = a_co * uInverseRatio;\n" "}\n" ""}, .fs = @@ -66,7 +68,11 @@ static struct vg_shader _shader_blit = { ""}, }; +static GLuint _uniform_blit_uInverseRatio; static GLuint _uniform_blit_uTexMain; +static void shader_blit_uInverseRatio(v2f v){ + glUniform2fv(_uniform_blit_uInverseRatio,1,v); +} static void shader_blit_uTexMain(int i){ glUniform1i(_uniform_blit_uTexMain,i); } @@ -75,6 +81,7 @@ static void shader_blit_register(void){ } static void shader_blit_use(void){ glUseProgram(_shader_blit.id); } static void shader_blit_link(void){ + _uniform_blit_uInverseRatio = glGetUniformLocation( _shader_blit.id, "uInverseRatio" ); _uniform_blit_uTexMain = glGetUniformLocation( _shader_blit.id, "uTexMain" ); } #endif /* SHADER_blit_H */ diff --git a/shaders/blit.vs b/shaders/blit.vs index 2593725..06ffba6 100644 --- a/shaders/blit.vs +++ b/shaders/blit.vs @@ -1,8 +1,10 @@ layout (location=0) in vec2 a_co; out vec2 aUv; +uniform vec2 uInverseRatio; + void main() { gl_Position = vec4(a_co*2.0-1.0,0.0,1.0); - aUv = a_co; + aUv = a_co * uInverseRatio; } diff --git a/shaders/blitblur.h b/shaders/blitblur.h index 0eca2ce..ac5f784 100644 --- a/shaders/blitblur.h +++ b/shaders/blitblur.h @@ -12,10 +12,12 @@ static struct vg_shader _shader_blitblur = { "layout (location=0) in vec2 a_co;\n" "out vec2 aUv;\n" "\n" +"uniform vec2 uInverseRatio;\n" +"\n" "void main()\n" "{\n" " gl_Position = vec4(a_co*2.0-1.0,0.0,1.0);\n" -" aUv = a_co;\n" +" aUv = a_co * uInverseRatio;\n" "}\n" ""}, .fs = @@ -55,10 +57,14 @@ static struct vg_shader _shader_blitblur = { ""}, }; +static GLuint _uniform_blitblur_uInverseRatio; static GLuint _uniform_blitblur_uTexMain; static GLuint _uniform_blitblur_uTexMotion; static GLuint _uniform_blitblur_uBlurStrength; static GLuint _uniform_blitblur_uOverrideDir; +static void shader_blitblur_uInverseRatio(v2f v){ + glUniform2fv(_uniform_blitblur_uInverseRatio,1,v); +} static void shader_blitblur_uTexMain(int i){ glUniform1i(_uniform_blitblur_uTexMain,i); } @@ -76,6 +82,7 @@ static void shader_blitblur_register(void){ } static void shader_blitblur_use(void){ glUseProgram(_shader_blitblur.id); } static void shader_blitblur_link(void){ + _uniform_blitblur_uInverseRatio = glGetUniformLocation( _shader_blitblur.id, "uInverseRatio" ); _uniform_blitblur_uTexMain = glGetUniformLocation( _shader_blitblur.id, "uTexMain" ); _uniform_blitblur_uTexMotion = glGetUniformLocation( _shader_blitblur.id, "uTexMotion" ); _uniform_blitblur_uBlurStrength = glGetUniformLocation( _shader_blitblur.id, "uBlurStrength" ); diff --git a/shaders/blitcolour.h b/shaders/blitcolour.h index 3d5dd5e..91a2e61 100644 --- a/shaders/blitcolour.h +++ b/shaders/blitcolour.h @@ -12,10 +12,12 @@ static struct vg_shader _shader_blitcolour = { "layout (location=0) in vec2 a_co;\n" "out vec2 aUv;\n" "\n" +"uniform vec2 uInverseRatio;\n" +"\n" "void main()\n" "{\n" " gl_Position = vec4(a_co*2.0-1.0,0.0,1.0);\n" -" aUv = a_co;\n" +" aUv = a_co * uInverseRatio;\n" "}\n" ""}, .fs = @@ -34,7 +36,11 @@ static struct vg_shader _shader_blitcolour = { ""}, }; +static GLuint _uniform_blitcolour_uInverseRatio; static GLuint _uniform_blitcolour_uColour; +static void shader_blitcolour_uInverseRatio(v2f v){ + glUniform2fv(_uniform_blitcolour_uInverseRatio,1,v); +} static void shader_blitcolour_uColour(v4f v){ glUniform4fv(_uniform_blitcolour_uColour,1,v); } @@ -43,6 +49,7 @@ static void shader_blitcolour_register(void){ } static void shader_blitcolour_use(void){ glUseProgram(_shader_blitcolour.id); } static void shader_blitcolour_link(void){ + _uniform_blitcolour_uInverseRatio = glGetUniformLocation( _shader_blitcolour.id, "uInverseRatio" ); _uniform_blitcolour_uColour = glGetUniformLocation( _shader_blitcolour.id, "uColour" ); } #endif /* SHADER_blitcolour_H */ diff --git a/skaterift.c b/skaterift.c index 00dbb11..f0fb218 100644 --- a/skaterift.c +++ b/skaterift.c @@ -37,7 +37,6 @@ player_instance *tmp_localplayer(void) #include "vehicle.h" static int cl_ui = 1, - cl_view_id = 0, cl_light_edit = 0; int main( int argc, char *argv[] ) @@ -126,14 +125,6 @@ VG_STATIC void vg_preload(void) .persistent = 0 }); - vg_var_push( (struct vg_var){ - .name = "cl_view_id", - .data = &cl_view_id, - .data_type = k_var_dtype_i32, - .opt_i32 = { .min=0, .max=1, .clamp=1 }, - .persistent = 0 - }); - vg_var_push( (struct vg_var){ .name = "ledit", .data = &cl_light_edit, @@ -429,34 +420,34 @@ VG_STATIC void vg_framebuffer_resize( int w, int h ) VG_STATIC void present_view_with_post_processing(void) { glBindFramebuffer( GL_FRAMEBUFFER, 0 ); + glViewport( 0,0, vg.window_x, vg.window_y ); glEnable(GL_BLEND); glDisable(GL_DEPTH_TEST); glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_DST_ALPHA); glBlendEquation(GL_FUNC_ADD); + v2f inverse; + render_fb_inverse_ratio( gpipeline.fb_main, inverse ); + if( cl_blur ){ shader_blitblur_use(); shader_blitblur_uTexMain( 0 ); shader_blitblur_uTexMotion( 1 ); shader_blitblur_uBlurStrength(cl_blur_strength / (vg.frame_delta*60.0f)); + shader_blitblur_uInverseRatio( inverse ); v2f menu_blurring; v2_muls( (v2f){ 0.04f, 0.001f }, menu_opacity, menu_blurring ); shader_blitblur_uOverrideDir( menu_blurring ); - if( cl_view_id == 0 ) - render_fb_bind_texture( gpipeline.fb_main, 0, 0 ); - else if( cl_view_id == 1 ) - render_fb_bind_texture( gpipeline.fb_main, 1, 0 ); - else - render_fb_bind_texture( gpipeline.fb_main, 0, 0 ); - + render_fb_bind_texture( gpipeline.fb_main, 0, 0 ); render_fb_bind_texture( gpipeline.fb_main, 1, 1 ); } else{ shader_blit_use(); shader_blit_uTexMain( 0 ); + shader_blit_uInverseRatio( inverse ); render_fb_bind_texture( gpipeline.fb_main, 0, 0 ); } @@ -480,13 +471,13 @@ VG_STATIC void render_player_transparent(void) /* Draw player to window buffer and blend background ontop */ glBindFramebuffer( GL_FRAMEBUFFER, 0 ); + glViewport( 0,0, vg.window_x, vg.window_y ); player__render( &small_cam, &localplayer ); } VG_STATIC void render_scene(void) { - render_fb_bind( gpipeline.fb_main ); - glViewport( 0,0, g_render_x, g_render_y ); + render_fb_bind( gpipeline.fb_main, 1 ); glClearColor( 0.0f, 0.0f, 0.0f, 1.0f ); glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT ); @@ -503,10 +494,8 @@ VG_STATIC void render_scene(void) render_world( view_world, &main_camera, 0 ); - render_water_texture( view_world, &main_camera, 0 ); - render_fb_bind( gpipeline.fb_main ); - glViewport( 0,0, g_render_x, g_render_y ); + render_fb_bind( gpipeline.fb_main, 1 ); render_water_surface( view_world, &main_camera ); int depth = 1; @@ -588,11 +577,7 @@ VG_STATIC void vg_render(void) { glBindFramebuffer( GL_FRAMEBUFFER, 0 ); - float scale = (sin(vg.time)*0.5f+0.5f)*0.75f+0.25f; - g_render_x = VG_MAX((float)vg.window_x * scale,64), - g_render_y = VG_MAX((float)vg.window_y * scale,64); - - glViewport( 0,0, g_render_x, g_render_y ); + glViewport( 0,0, vg.window_x, vg.window_y ); glDisable( GL_DEPTH_TEST ); glClearColor( 1.0f, 0.0f, 0.0f, 0.0f ); @@ -609,7 +594,6 @@ VG_STATIC void vg_render(void) glViewport( 0,0, vg.window_x, vg.window_y ); } -VG_STATIC void run_light_widget( struct light_widget *lw ); VG_STATIC void vg_ui(void) { #if 0 @@ -617,43 +601,6 @@ VG_STATIC void vg_ui(void) #endif world_instance *world = get_active_world(); menu_crap_ui(); - -#if 0 - if( cl_light_edit ) - { - vg_uictx.cursor[0] = 10; - vg_uictx.cursor[1] = 10; - vg_uictx.cursor[2] = 200; - vg_uictx.cursor[3] = 20; - - struct ub_world_lighting *wl = &gpipeline.ub_world_lighting; - struct ui_slider_vector - s5 = { .min=0.0f, .max=2.0f, .len=3, .data=wl->g_ambient_colour }; - - struct ui_slider - s8 = { .min=0.0f, .max=2.0f, .data = &gpipeline.shadow_spread }, - s9 = { .min=0.0f, .max=25.0f, .data = &gpipeline.shadow_length }; - - for( int i=0; i<3; i++ ) - run_light_widget( &gpipeline.widgets[i] ); - - ui_text( vg_uictx.cursor, "Ambient", 1, 0 ); - vg_uictx.cursor[1] += 16; - ui_slider_vector( &s5 ); - - ui_text( vg_uictx.cursor, "Shadows", 1, 0 ); - vg_uictx.cursor[1] += 16; - ui_slider( &s8 ); - ui_slider( &s9 ); - - ui_text( vg_uictx.cursor, "Misc", 1, 0 ); - vg_uictx.cursor[1] += 16; - struct ui_checkbox c1 = {.data = &wl->g_light_preview}; - ui_checkbox( &c1 ); - - render_update_lighting_ub(); - } -#endif audio_debug_soundscapes(); render_view_framebuffer_ui(); @@ -663,24 +610,6 @@ VG_STATIC void vg_ui(void) #endif } -VG_STATIC void run_light_widget( struct light_widget *lw ) -{ - struct ui_checkbox c1 = { .data=&lw->enabled }; - - ui_checkbox( &c1 ); - - if( lw->enabled ) - { - struct ui_slider_vector - colour = { .min=0.0f, .max=2.0f, .len=3, .data=lw->colour }, - dir = { .min=-VG_PIf, .max=VG_PIf, .len=2, .data=lw->dir }; - - ui_slider_vector( &colour ); - vg_uictx.cursor[1] += 4; - ui_slider_vector( &dir ); - } -} - VG_STATIC void run_debug_info(void) { #if 0 diff --git a/world_gate.h b/world_gate.h index 2febafa..ad87ed1 100644 --- a/world_gate.h +++ b/world_gate.h @@ -155,7 +155,7 @@ VG_STATIC int render_gate( world_instance *world_inside, glDisable( GL_STENCIL_TEST ); render_water_texture( world_inside, &gate_camera, layer_depth ); - render_fb_bind( gpipeline.fb_main ); + render_fb_bind( gpipeline.fb_main, 1 ); glEnable( GL_STENCIL_TEST ); diff --git a/world_gen.h b/world_gen.h index fb6031b..3117dc0 100644 --- a/world_gen.h +++ b/world_gen.h @@ -498,7 +498,7 @@ VG_STATIC void world_post_process( world_instance *world ) glDisable(GL_DEPTH_TEST); glDisable(GL_BLEND); glDisable(GL_CULL_FACE); - render_fb_bind( &world->heightmap ); + render_fb_bind( &world->heightmap, 0 ); shader_blitcolour_use(); shader_blitcolour_uColour( (v4f){-9999.0f,-9999.0f,-9999.0f,-9999.0f} ); render_fsquad(); diff --git a/world_water.h b/world_water.h index 7d67b13..84558a2 100644 --- a/world_water.h +++ b/world_water.h @@ -55,7 +55,7 @@ VG_STATIC void render_water_texture( world_instance *world, camera *cam, return; /* Draw reflection buffa */ - render_fb_bind( gpipeline.fb_water_reflection ); + render_fb_bind( gpipeline.fb_water_reflection, 1 ); glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT ); /* @@ -101,7 +101,7 @@ VG_STATIC void render_water_texture( world_instance *world, camera *cam, * Create beneath view matrix */ camera beneath_cam; - render_fb_bind( gpipeline.fb_water_beneath ); + render_fb_bind( gpipeline.fb_water_beneath, 1 ); glClearColor( 1.0f, 0.0f, 0.0f, 0.0f ); glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT ); @@ -121,7 +121,7 @@ VG_STATIC void render_water_texture( world_instance *world, camera *cam, glEnable( GL_DEPTH_TEST ); glDisable( GL_BLEND ); render_world_depth( world, &beneath_cam ); - glViewport( 0,0, g_render_x, g_render_y ); + //glViewport( 0,0, g_render_x, g_render_y ); } VG_STATIC void render_water_surface( world_instance *world, camera *cam ) -- 2.25.1