From 8de494d7ddde2e3ce29b43366850320d08a481c4 Mon Sep 17 00:00:00 2001 From: hgn Date: Thu, 4 Jan 2024 13:18:20 +0000 Subject: [PATCH] add dsp and optional game page --- vg.h | 5 +++ vg_audio.h | 22 +++++----- vg_settings_menu.h | 105 +++++++++++++++++++++++++++++++-------------- 3 files changed, 89 insertions(+), 43 deletions(-) diff --git a/vg.h b/vg.h index c4f55c3..2f6ee08 100644 --- a/vg.h +++ b/vg.h @@ -44,6 +44,11 @@ | | | v |IMP| | vg_gui(void) | | | | +| | | v +|IMP| | vg_game_settings_init(void) +|IMP| | vg_game_settings_gui( ui_rect panel ) +| | | | (optional: #define VG_GAME_SETTINGS) +| | | | | | '----' '___' diff --git a/vg_audio.h b/vg_audio.h index 5df5638..59ad057 100644 --- a/vg_audio.h +++ b/vg_audio.h @@ -193,7 +193,7 @@ struct vg_audio_system{ } channels[ AUDIO_CHANNELS ]; - int debug_ui, debug_ui_3d, debug_dsp; + int debug_ui, debug_ui_3d, debug_dsp, dsp_enabled; v3f internal_listener_pos, internal_listener_ears, @@ -206,7 +206,7 @@ struct vg_audio_system{ float internal_global_volume, external_global_volume; } -static vg_audio = { .external_global_volume = 1.0f }; +static vg_audio = { .external_global_volume = 1.0f, .dsp_enabled = 1 }; #include "vg/vg_audio_dsp.h" @@ -307,6 +307,8 @@ static void vg_audio_register(void){ k_var_dtype_f32, VG_VAR_PERSISTENT ); vg_console_reg_var( "vg_audio_device", &vg_audio.device_choice, k_var_dtype_str, VG_VAR_PERSISTENT ); + vg_console_reg_var( "vg_dsp", &vg_audio.dsp_enabled, + k_var_dtype_i32, VG_VAR_PERSISTENT ); } static void vg_audio_init(void){ @@ -978,12 +980,12 @@ static void audio_channel_mix( audio_channel *ch, float *buffer ) vg_profile_end( &_vg_prof_audio_mix ); } -static void audio_mixer_callback( void *user, u8 *stream, int byte_count ) -{ +static void audio_mixer_callback( void *user, u8 *stream, int byte_count ){ /* * Copy data and move edit flags to commit flags * ------------------------------------------------------------- */ audio_lock(); + int use_dsp = vg_audio.dsp_enabled; v3_copy( vg_audio.external_listener_pos, vg_audio.internal_listener_pos ); v3_copy( vg_audio.external_listener_ears, vg_audio.internal_listener_ears ); @@ -1163,12 +1165,12 @@ static void audio_mixer_callback( void *user, u8 *stream, int byte_count ) } } - vg_profile_begin( &_vg_prof_dsp ); - - for( int i=0; iglyph_height + 18) * k_ui_scale; + ui_split( inout_panel, k_ui_axis_h, -height, k_ui_padding, + inout_panel, last_row ); + + const char *string = "Apply"; + if( validated ){ + if( ui_button( last_row, string ) == 1 ) + return 1; + } + else{ + ui_rect rect; + ui_standard_widget( last_row, rect, 1 ); + ui_fill( rect, ui_colour( k_ui_bg+1 ) ); + ui_outline( rect, -1, ui_colour( k_ui_red ), 0 ); + + ui_rect t = { 0,0, ui_text_line_width( string ), 14 }; + ui_rect_center( rect, t ); + ui_text( t, string, 1, k_ui_align_left, ui_colour(k_ui_fg+3) ); + } + + return 0; +} + static void vg_settings_video_apply(void){ if( vg_settings_enum_diff( &vg_settings.screenmode ) ){ vg.screen_mode = vg_settings.screenmode.new_value; @@ -231,27 +270,8 @@ static void vg_settings_video_gui( ui_rect panel ){ ui_standard_widget( panel, duo, 1 ); vg_settings_enum( &vg_settings.screenmode, duo ); - /* apply */ - ui_rect last_row; - ui_px height = (vg_ui.font->glyph_height + 18) * k_ui_scale; - ui_split( panel, k_ui_axis_h, -height, k_ui_padding, - panel, last_row ); - - const char *string = "Apply"; - if( validated ){ - if( ui_button( last_row, string ) == 1 ) - vg_settings_video_apply(); - } - else{ - ui_rect rect; - ui_standard_widget( last_row, rect, 1 ); - ui_fill( rect, ui_colour( k_ui_bg+1 ) ); - ui_outline( rect, -1, ui_colour( k_ui_red ), 0 ); - - ui_rect t = { 0,0, ui_text_line_width( string ), 14 }; - ui_rect_center( rect, t ); - ui_text( t, string, 1, k_ui_align_left, ui_colour(k_ui_fg+3) ); - } + if( vg_settings_apply_button( panel, validated ) ) + vg_settings_video_apply(); } static void vg_settings_audio_apply(void){ @@ -287,21 +307,25 @@ static void vg_settings_audio_apply(void){ *vg_settings.audio_devices.actual_value = vg_settings.audio_devices.new_value; } + + audio_lock(); + if( vg_settings_enum_diff( &vg_settings.dsp ) ){ + *vg_settings.dsp.actual_value = + vg_settings.dsp.new_value; + } + + audio_unlock(); } static void vg_settings_audio_gui( ui_rect panel ){ ui_rect rq; ui_standard_widget( panel, rq, 1 ); vg_settings_enum( &vg_settings.audio_devices, rq ); + + ui_standard_widget( panel, rq, 1 ); + vg_settings_enum( &vg_settings.dsp, rq ); - const char *string = "Apply"; - - ui_rect last_row; - ui_px height = (vg_ui.font->glyph_height + 18) * k_ui_scale; - ui_split( panel, k_ui_axis_h, -height, k_ui_padding, - panel, last_row ); - - if( ui_button( last_row, string ) == 1 ) + if( vg_settings_apply_button( panel, 1 ) ) vg_settings_audio_apply(); } @@ -351,6 +375,11 @@ static void vg_settings_open(void){ } ui_settings_enum_init( &vg_settings.audio_devices ); + ui_settings_enum_init( &vg_settings.dsp ); + +#ifdef VG_GAME_SETTINGS + vg_game_settings_init(); +#endif } static void vg_settings_close(void){ @@ -388,15 +417,25 @@ static void vg_settings_gui(void){ ui_rect_pad( panel, (ui_px[2]){ 8, 8 } ); + const char *opts[] = { "video", "audio", +#ifdef VG_GAME_SETTINGS + "game" +#endif + }; + static i32 page = 0; - ui_tabs( panel, panel, (const char *[]){ "video", "audio", "game" }, - 3, &page ); + ui_tabs( panel, panel, opts, vg_list_size(opts), &page ); if( page == 0 ){ vg_settings_video_gui( panel ); } else if( page == 1 ) vg_settings_audio_gui( panel ); + +#ifdef VG_GAME_SETTINGS + else if( page == 2 ) + vg_game_settings_gui( panel ); +#endif } static int cmd_vg_settings_toggle( int argc, const char *argv[] ){ -- 2.25.1