switch to async system
[vg.git] / vg_loader.h
index ffdd87ad3c9d9803ee9a131f9b84513c25b033f7..f62763d5ca63445115a206cb3fc5d296efefbac0 100644 (file)
@@ -145,7 +145,7 @@ VG_STATIC void _vg_loader_init(void)
    VG_CHECK_GL_ERR();
 
    if( !vg_shader_compile( &_shader_loader ) )
-      vg_fatal_exit_loop( "failed to compile shader" );
+      vg_fatal_error( "failed to compile shader" );
 }
 
 VG_STATIC void _vg_loader_free(void)
@@ -234,28 +234,22 @@ VG_STATIC void vg_load_full(void);
 
 VG_STATIC int _vg_loader_thread(void *pfn)
 {
-   SDL_AtomicLock( &vg.sl_context );
-   vg.thread_id_loader = SDL_GetThreadID(NULL);
-   VG_SYNC_LOG( "[%d] Loader thread begins\n" );
-   SDL_AtomicUnlock( &vg.sl_context );
+   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();
 
    SDL_SemPost( vg.sem_loader );
    vg.thread_id_loader = 0;
 
-   vg_acquire_thread_sync();
-   vg.is_loaded = 1;
-   vg_release_thread_sync();
-
    return 0;
 }
 
 VG_STATIC void vg_loader_start( void(*pfn)(void) )
 {
-   vg.is_loaded = 0;
    SDL_SemWait( vg.sem_loader );
    SDL_CreateThread( _vg_loader_thread, "Loader thread", pfn );
 }
@@ -268,18 +262,17 @@ VG_STATIC void vg_loader_step( void( *fn_load )(void), void( *fn_free )(void) )
    if( fn_load )
       fn_load();
 
-   if( fn_free )
-   {
+   if( fn_free ){
       struct loader_free_step step;
       step.fn_free = fn_free;
 
       if( vg_loader.step_count == vg_list_size(vg_loader.step_buffer) )
-         vg_fatal_exit_loop( "Too many free steps" );
+         vg_fatal_error( "Too many free steps" );
 
       vg_loader.step_buffer[ vg_loader.step_count ++ ] = step;
    }
 
-   _vg_ensure_engine_running();
+   /* TODO: There was a quit checker here, re-add this? */
 }
 
 #endif /* VG_LOADER_H */