From 35c5972b279f40dde6f2b752edc802b10385dfb7 Mon Sep 17 00:00:00 2001 From: hgn Date: Tue, 18 Mar 2025 15:31:41 +0000 Subject: [PATCH] filebrowser demo & api changes for dir --- src/addon.c | 8 ++++--- src/client.c | 10 +------- src/render.c | 44 ----------------------------------- src/skaterift.c | 2 +- src/utest.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++-- src/workshop.c | 5 ++-- src/world_load.c | 2 +- 7 files changed, 69 insertions(+), 62 deletions(-) diff --git a/src/addon.c b/src/addon.c index 6fc7772..164699b 100644 --- a/src/addon.c +++ b/src/addon.c @@ -461,9 +461,10 @@ addon_reg *addon_mount_local_addon( const char *folder, enum addon_type type, co vg_warn( "Creating own metadata for: %s\n", folder_path.buffer ); vg_dir subdir; - if( !vg_dir_open(&subdir, folder_path.buffer) ) + enum dir_open_result result = vg_dir_open(&subdir, folder_path.buffer); + if( result != k_dir_open_ok ) { - vg_error( "Failed to open '%s'\n", folder_path.buffer ); + vg_error( "Failed to open '%s' (%s)\n", folder_path.buffer, dir_open_result_str[result] ); return NULL; } @@ -577,7 +578,8 @@ void addon_mount_content_folder( enum addon_type type, vg_strcat( &path, base_folder ); vg_dir dir; - if( !vg_dir_open(&dir,path.buffer) ){ + if( vg_dir_open(&dir,path.buffer) != k_dir_open_ok ) + { vg_error( "vg_dir_open('%s') failed\n", path.buffer ); return; } diff --git a/src/client.c b/src/client.c index ae1cbc1..daedaa5 100644 --- a/src/client.c +++ b/src/client.c @@ -40,14 +40,6 @@ void vg_load(void) void vg_preload(void) { -vg_info(" Copyright . . . -----, ,----- ,---. .---. \n" ); -vg_info(" 2021-2024 |\\ /| | / | | | | /| \n" ); -vg_info(" | \\ / | +-- / +----- +---' | / | \n" ); -vg_info(" | \\ / | | / | | \\ | / | \n" ); -vg_info(" | \\/ | | / | | \\ | / | \n" ); -vg_info(" ' ' '--' [] '----- '----- ' ' '---' " - "SOFTWARE\n" ); - /* please forgive me! */ u32 sz; char *drm; if( (drm = vg_file_read_text( vg_mem.scratch, "DRM", &sz )) ) @@ -67,7 +59,7 @@ vg_info(" ' ' '--' [] '----- '----- ' ' '---' " void vg_launch_opt(void) { - const char *arg; + const char *arg; // if( vg_long_opt( "noauth", "Disable server authentication" ) ) network_client.auth_mode = eServerModeNoAuthentication; diff --git a/src/render.c b/src/render.c index 258e642..6399db4 100644 --- a/src/render.c +++ b/src/render.c @@ -129,47 +129,3 @@ void render_fsquad2(void) glBindVertexArray( g_render.fsquad.vao ); glDrawArrays( GL_TRIANGLES, 66+6,6 ); } - -#if 0 -void postprocess_to_screen( vg_framebuffer *fb ) -{ - 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; - vg_framebuffer_inverse_ratio( fb, inverse ); - - if( k_blur_effect ) - { - shader_blitblur_use(); - shader_blitblur_uTexMain( 0 ); - shader_blitblur_uTexMotion( 1 ); - - f32 s = vg.time_frame_delta*60.0; - shader_blitblur_uBlurStrength( k_blur_strength / s ); - shader_blitblur_uInverseRatio( inverse ); - - inverse[0] -= 0.0001f; - inverse[1] -= 0.0001f; - shader_blitblur_uClampUv( inverse ); - shader_blitblur_uOverrideDir( g_render.blur_override ); - - vg_framebuffer_bind_texture( fb, 0, 0 ); - vg_framebuffer_bind_texture( fb, 1, 1 ); - } - else - { - glUseProgram( _shader_blit.id ); - glUniform1i( glGetUniformLocation( _shader_blit.id, "uTexMain" ), 0 ); - glUniform2fv( glGetUniformLocation( _shader_blit.id, "uInverseRatio" ),1, vg_ui.bg_inverse_ratio ); - vg_framebuffer_bind_texture( fb, 0, 0 ); - } - - render_fsquad(); -} -#endif diff --git a/src/skaterift.c b/src/skaterift.c index 7ae5ccb..63b7089 100644 --- a/src/skaterift.c +++ b/src/skaterift.c @@ -2,7 +2,7 @@ * ============================================================================= * * Copyright . . . -----, ,----- ,---. .---. - * 2021-2024 |\ /| | / | | | | /| + * 2021-2025 |\ /| | / | | | | /| * | \ / | +-- / +----- +---' | / | * | \ / | | / | | \ | / | * | \/ | | / | | \ | / | diff --git a/src/utest.c b/src/utest.c index c286ce1..fcf768d 100644 --- a/src/utest.c +++ b/src/utest.c @@ -3,11 +3,54 @@ #include "vg/vg_io.h" #include "vg/vg_audio.h" #include "vg/vg_async.h" +#include "vg/vg_magi.h" +#include "vg/vg_ui/imgui.h" +#include "vg/vg_ui/filebrowser.h" const char* __asan_default_options() { return "detect_leaks=0"; } +void filebrowser_demo_ui( ui_context *ctx, ui_rect rect, struct vg_magi_panel *magi ) +{ + struct vg_filebrowser *browser = magi->data; + enum filebrowser_action action = vg_filebrowser_ui( ctx, rect, browser ); + + if( action ) + { + vg_success( "action: %d\n", action ); + } +} + +void filebrowser_demo_close( struct vg_magi_panel *magi ) +{ + struct vg_filebrowser *browser = magi->data; + vg_filebrowser_free_entries( browser ); + free( browser ); +} + +int cmd_open_browser( int argc, const char *argv[] ) +{ + struct vg_filebrowser *browser = malloc( sizeof(struct vg_filebrowser) ); + vg_filebrowser_init( browser ); + browser->mode = k_filebrowser_mode_pick_file; + browser->filter = 0x1 << k_media_type_image; + + struct vg_magi_panel *magi = _vg_magi_open( 800, 600, VG_MAGI_ALL ); + magi->title = "File browser demo"; + magi->data = browser; + magi->ui_cb = filebrowser_demo_ui; + magi->close_cb = filebrowser_demo_close; + + if( argc ) + vg_strncpy( argv[0], browser->current_path, sizeof(browser->current_path), k_strncpy_overflow_fatal ); + else + strcpy( browser->current_path, "/" ); + vg_filebrowser_populate( browser ); + return 0; +} + void vg_load(void) { + vg_console_reg_cmd( "fib", cmd_open_browser, NULL ); vg_bake_shaders(); vg_console_load_autos(); } @@ -33,6 +76,19 @@ int main( int argc, char *argv[] ) void vg_pre_update(void){} void vg_fixed_update(void){} void vg_post_update(void){} -void vg_render(void){} -void vg_gui( ui_context *ctx ){} +void vg_render(void) +{ + glBindFramebuffer( GL_FRAMEBUFFER, 0 ); + glViewport( 0,0, vg.window_x, vg.window_y ); + glClearColor( 0.0f, 0.0f, 0.0f, 1.0f ); + glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT ); +} + +void vg_gui( ui_context *ctx ) +{ + ui_capture_mouse( ctx, 1 ); +} + void vg_framebuffer_resize( int w, int h ){} + +#include "vg/vg_ui/filebrowser.c" diff --git a/src/workshop.c b/src/workshop.c index 8b27a42..a2c1ef3 100644 --- a/src/workshop.c +++ b/src/workshop.c @@ -335,7 +335,7 @@ static void _workshop_form_submit_thread( void *data ) vg_info( "binstr: %s\n", short_descriptor_str ); vg_dir dir; - if( !vg_dir_open( &dir, folder.buffer ) ) + if( vg_dir_open( &dir, folder.buffer ) != k_dir_open_ok ) { vg_error( "could not open addon folder '%s'\n", folder.buffer ); workshop_form.op = k_workshop_op_none; @@ -496,7 +496,8 @@ static void _workshop_form_load_thread( void *data ) } vg_dir dir; - if( !vg_dir_open( &dir, folder.buffer ) ){ + if( vg_dir_open( &dir, folder.buffer ) != k_dir_open_ok ) + { vg_error( "workshop async load failed: could not open folder\n" ); vg_async_call( workshop_form_loadmodel_async_error, NULL, 0 ); workshop_form.op = k_workshop_op_none; diff --git a/src/world_load.c b/src/world_load.c index 0b0e0b7..2fd36da 100644 --- a/src/world_load.c +++ b/src/world_load.c @@ -259,7 +259,7 @@ void skaterift_world_load_thread( void *_ ) found_main_mdl = 0; vg_dir dir; - if( !vg_dir_open(&dir, folder.buffer) ) + if( vg_dir_open(&dir, folder.buffer) != k_dir_open_ok ) { vg_error( "opendir('%s') failed\n", folder.buffer ); return; -- 2.25.1