X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=vg_loader.h;h=ebd1d561cfa44e9cb9ed71a240827565a1ed4171;hb=ffd724233b7a3cb89d0d5d253ba4c475d87c76e2;hp=3c519b57137bc99d19707c80b07c421e1c178079;hpb=2026f6fe648696888762c5b10210191748a6c9de;p=vg.git diff --git a/vg_loader.h b/vg_loader.h index 3c519b5..ebd1d56 100644 --- a/vg_loader.h +++ b/vg_loader.h @@ -12,7 +12,7 @@ #include "common.h" -VG_STATIC void vg_loader_start( void(*pfn)(void) ); +VG_STATIC void vg_loader_start( void(*pfn)(void *data), void *data ); VG_STATIC void vg_loader_step( void( *fn_load )(void), void( *fn_free )(void) ); static struct vg_shader _shader_loader = @@ -79,8 +79,7 @@ static struct vg_shader _shader_loader = static struct vg_loader { /* Shutdown steps */ - struct loader_free_step - { + struct loader_free_step{ void (*fn_free)(void); } step_buffer[16]; @@ -190,15 +189,15 @@ VG_STATIC void _vg_loader_render(void) VG_STATIC void vg_load_full(void); -VG_STATIC int _vg_loader_thread(void *pfn) +VG_STATIC int _vg_loader_thread( void *pfn ) { if( setjmp( vg.env_loader_exit ) ) return 0; /* Run client loader */ vg_info( "Starting client loader thread @%p\n", pfn ); - void (*call_func)(void) = pfn; - call_func(); + void (*call_func)(void *data) = pfn; + call_func( vg.thread_data ); SDL_SemPost( vg.sem_loader ); vg.thread_id_loader = 0; @@ -206,9 +205,11 @@ VG_STATIC int _vg_loader_thread(void *pfn) return 0; } -VG_STATIC void vg_loader_start( void(*pfn)(void) ) +VG_STATIC void vg_loader_start( void(*pfn)(void *data), void *data ) { SDL_SemWait( vg.sem_loader ); + + vg.thread_data = data; SDL_CreateThread( _vg_loader_thread, "Loader thread", pfn ); }