#ifndef VG_LOADER_H
#define VG_LOADER_H
-#include "common.h"
+#define VG_GAME
+#include "vg/vg.h"
+#include "vg/vg_shader.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 =
"void main()"
"{"
-
"vec3 col = 0.5+0.5*sin( uTime + aUv.xyx + vec3(0.0,2.0,4.0) );"
"vec2 uvx = aUv - vec2( 0.5 );"
static struct vg_loader
{
/* Shutdown steps */
- struct loader_free_step
- {
+ struct loader_free_step{
void (*fn_free)(void);
}
step_buffer[16];
VG_STATIC void _vg_render_log(void)
{
+#if 0
ui_begin( vg.window_x, vg.window_y );
SDL_AtomicLock( &log_print_sl );
ui_resolve();
ui_draw( NULL );
+#endif
}
VG_STATIC void _vg_loader_render_ring( float opacity )
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;
return 0;
}
-VG_STATIC void vg_loader_start( void(*pfn)(void) )
+static int vg_loader_availible(void){
+ return SDL_SemValue( vg.sem_loader );
+}
+
+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 );
}