X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=vg_loader.h;h=cdd29ebc302d80266e6041865d706571b296b68f;hb=76d234b7dc5e6500e8a54009b367e7620f11ef97;hp=6d8be1b064f1fc3a2cb391ed8431c054a2c69780;hpb=4c48fe01a5d1983be89b7dce6f08e6b708cfbb05;p=vg.git diff --git a/vg_loader.h b/vg_loader.h index 6d8be1b..cdd29eb 100644 --- a/vg_loader.h +++ b/vg_loader.h @@ -10,12 +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" + +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 new foreground shader */ .vs = { .orig_file = NULL, @@ -35,17 +42,37 @@ 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 )" + "{" + "vec4 vsines = sin( (uTime+uv.y*80.0) * vec4(1.1,2.0234,3.73,2.444) );" + "float gradient = min( uv.y, 0.0 );" + "float offset = vsines.x*vsines.y*vsines.z*vsines.w*gradient;" + + "vec2 vpos = uv + vec2( offset, 0.0 );" + "float dist = dot( vpos, vpos );" + + "float fring = step(0.1*0.1,dist) * step(dist,0.15*0.15);" + "return max( 0.0, fring * 1.0+gradient*6.0 );" + "}" "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);" - "float fmt1 = step( 0.5, grad+dither );" - "vec3 col = 0.5+0.5*sin( uTime + aUv.xyx + vec3(0.0,2.0,4.0) );" + + "vec2 uvx = aUv - vec2( 0.5 );" + "uvx.x *= uRatio;" + "uvx.y *= 0.75;" - "FragColor = vec4(col*grad*fmt1,1.0);" + "float zero = eval_zero( uvx );" + + "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),uOpacity);" "}" } }; @@ -53,10 +80,8 @@ static struct vg_shader _shader_loader = static struct vg_loader { /* Shutdown steps */ - struct loader_free_step - { - void (*fn_free)(void *); - void *data; + struct loader_free_step{ + void (*fn_free)(void); } step_buffer[16]; u32 step_count, step_action; @@ -65,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 }; @@ -82,10 +107,10 @@ 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) +static void _vg_loader_free(void) { vg_info( "vg_loader_free\n" ); glDeleteVertexArrays( 1, &vg_loader.vao ); @@ -97,24 +122,13 @@ VG_STATIC void vg_loader_free(void) &vg_loader.step_buffer[vg_loader.step_count -1 -i]; vg_info( " -> %p\n", step->fn_free ); - step->fn_free( step->data ); + step->fn_free(); } - - vg_info( "done\n" ); -} - -VG_STATIC float hue_to_rgb( float p, float q, float t ) -{ - if(t < 0.0f) t += 1.0f; - if(t > 1.0f) t -= 1.0f; - if(t < 1.0f/6.0f) return p + (q - p) * 6.0f * t; - if(t < 1.0f/2.0f) return q; - if(t < 2.0f/3.0f) return p + (q - p) * (2.0f/3.0f - t) * 6.0f; - return p; } -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 ); @@ -130,8 +144,7 @@ VG_STATIC void vg_render_log(void) vg_uictx.cursor[3] = fh; ui_fill_x(); - for( int i=0; i