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;
}
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;
}
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 )) )
void vg_launch_opt(void)
{
- const char *arg;
+ const char *arg; //
if( vg_long_opt( "noauth", "Disable server authentication" ) )
network_client.auth_mode = eServerModeNoAuthentication;
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
* =============================================================================
*
* Copyright . . . -----, ,----- ,---. .---.
- * 2021-2024 |\ /| | / | | | | /|
+ * 2021-2025 |\ /| | / | | | | /|
* | \ / | +-- / +----- +---' | / |
* | \ / | | / | | \ | / |
* | \/ | | / | | \ | / |
#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();
}
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"
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;
}
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;
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;