X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=vg_loader.h;h=cdd29ebc302d80266e6041865d706571b296b68f;hb=76d234b7dc5e6500e8a54009b367e7620f11ef97;hp=f62763d5ca63445115a206cb3fc5d296efefbac0;hpb=651edda3736812c89f43c11319c6b485ff14ea19;p=vg.git diff --git a/vg_loader.h b/vg_loader.h index f62763d..cdd29eb 100644 --- a/vg_loader.h +++ b/vg_loader.h @@ -10,54 +10,19 @@ #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_step( void( *fn_load )(void), void( *fn_free )(void) ); +static void vg_loader_start( void(*pfn)(void *data), void *data ); +static void vg_loader_step( void( *fn_load )(void), void( *fn_free )(void) ); static struct vg_shader _shader_loader = { .name = "[vg] loader", .link = NULL, - /* This is the old background shader */ -#if 0 - .vs = - { - .orig_file = NULL, - .static_src = "" - "layout (location=0) in vec2 a_co;" - "out vec2 aUv;" - "void main()" - "{" - "gl_Position = vec4(a_co*2.0-1.0,0.0,1.0);" - "aUv = a_co;" - "}" - }, - .fs = - { - .orig_file = NULL, - .static_src = - - "out vec4 FragColor;" - "uniform float uTime;" - "in vec2 aUv;" - - "void main()" - "{" - "float dither=fract(dot(vec2(171.0,231.0),gl_FragCoord.xy)/71.0)-0.5;" - "float grad = 1.0-(aUv.y*0.5+0.5)*0.5;" - "float fmt1 = step( 0.5, grad+dither );" - - "vec3 col = 0.5+0.5*sin( uTime + aUv.xyx + vec3(0.0,2.0,4.0) );" - - "FragColor = vec4(vec3(0.5,0.5,0.5)*grad*fmt1,1.0);" - "}" - } -#else - /* This is the new foreground shader */ - .vs = { .orig_file = NULL, @@ -78,6 +43,7 @@ static struct vg_shader _shader_loader = "out vec4 FragColor;" "uniform float uTime;" "uniform float uRatio;" + "uniform float uOpacity;" "in vec2 aUv;" "float eval_zero( vec2 uv )" @@ -95,7 +61,6 @@ 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 );" @@ -107,18 +72,15 @@ static struct vg_shader _shader_loader = "float dither=fract(dot(vec2(171.0,231.0),gl_FragCoord.xy)/71.0)-0.5;" "float fmt1 = step( 0.5, zero*zero + dither )*0.8+0.2;" - "FragColor = vec4(vec3(fmt1),0.8);" + "FragColor = vec4(vec3(fmt1),uOpacity);" "}" } - -#endif }; static struct vg_loader { /* Shutdown steps */ - struct loader_free_step - { + struct loader_free_step{ void (*fn_free)(void); } step_buffer[16]; @@ -128,7 +90,7 @@ static struct vg_loader } vg_loader; -VG_STATIC void _vg_loader_init(void) +static void _vg_loader_init(void) { float quad[] = { 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f }; @@ -148,7 +110,7 @@ VG_STATIC void _vg_loader_init(void) vg_fatal_error( "failed to compile shader" ); } -VG_STATIC void _vg_loader_free(void) +static void _vg_loader_free(void) { vg_info( "vg_loader_free\n" ); glDeleteVertexArrays( 1, &vg_loader.vao ); @@ -162,12 +124,11 @@ VG_STATIC void _vg_loader_free(void) vg_info( " -> %p\n", step->fn_free ); step->fn_free(); } - - vg_info( "done\n" ); } -VG_STATIC void _vg_render_log(void) +static void _vg_render_log(void) { +#if 0 ui_begin( vg.window_x, vg.window_y ); SDL_AtomicLock( &log_print_sl ); @@ -197,25 +158,11 @@ VG_STATIC void _vg_render_log(void) ui_resolve(); ui_draw( NULL ); +#endif } -VG_STATIC void _vg_loader_render(void) +static void _vg_loader_render_ring( float opacity ) { - glViewport( 0,0, vg.window_x, vg.window_y ); - glBindFramebuffer( GL_FRAMEBUFFER, 0 ); - glClearColor( 0.0f, 0.0f, 0.0f, 1.0f ); - glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT ); - -#if 0 - glUseProgram( _shader_loader.id ); - glUniform1f( glGetUniformLocation( _shader_loader.id, "uTime" ), vg.time ); - glBindVertexArray( vg_loader.vao ); - glDrawArrays( GL_TRIANGLES, 0, 6 ); -#endif - - _vg_render_log(); - -#if 1 glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendEquation(GL_FUNC_ADD); @@ -224,23 +171,33 @@ VG_STATIC void _vg_loader_render(void) glUniform1f( glGetUniformLocation( _shader_loader.id, "uTime" ), vg.time ); float ratio = (float)vg.window_x / (float)vg.window_y; glUniform1f( glGetUniformLocation( _shader_loader.id, "uRatio"), ratio ); + glUniform1f( glGetUniformLocation( _shader_loader.id, "uOpacity"), opacity ); glBindVertexArray( vg_loader.vao ); glDrawArrays( GL_TRIANGLES, 0, 6 ); -#endif } +static void _vg_loader_render(void) +{ + glViewport( 0,0, vg.window_x, vg.window_y ); + glBindFramebuffer( GL_FRAMEBUFFER, 0 ); + glClearColor( 0.0f, 0.0f, 0.0f, 1.0f ); + glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT ); -VG_STATIC void vg_load_full(void); + _vg_render_log(); + vg.loader_ring = 1.0f; +} -VG_STATIC int _vg_loader_thread(void *pfn) -{ + +static void vg_load_full(void); + +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; @@ -248,16 +205,27 @@ VG_STATIC int _vg_loader_thread(void *pfn) return 0; } -VG_STATIC void vg_loader_start( void(*pfn)(void) ) +static int vg_loader_availible(void){ + if( SDL_SemValue( vg.sem_loader ) ){ + if( !(vg_async.start) ) + return 1; + } + + return 0; +} + +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 ); } /* * Schedule something to be ran now, freed later. Checks in with engine status */ -VG_STATIC void vg_loader_step( void( *fn_load )(void), void( *fn_free )(void) ) +static void vg_loader_step( void( *fn_load )(void), void( *fn_free )(void) ) { if( fn_load ) fn_load();