X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=src%2Fvg%2Fvg_loader.h;h=72e4c3cad37fe8fb24309669df887197fb8ae0bd;hb=3dd767bb10e6fee9cbffeb185d1a9685810c17b5;hp=6e3882af4c2bd5696f7c09e4b451e172136e483e;hpb=5729777dfec3f9f12c1821aa50db6a3c04cc359c;p=vg.git diff --git a/src/vg/vg_loader.h b/src/vg/vg_loader.h index 6e3882a..72e4c3c 100644 --- a/src/vg/vg_loader.h +++ b/src/vg/vg_loader.h @@ -12,6 +12,44 @@ #include "common.h" +static struct vg_shader _shader_loader = +{ + .name = "[vg] loader", + .link = NULL, + .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);" + "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(col*grad*fmt1,1.0);" + "}" + } +}; + static struct vg_loader { /* Shutdown steps */ @@ -20,19 +58,38 @@ static struct vg_loader void (*fn_free)(void *); void *data; } - *step_buffer; - u32 step_count, step_cap, step_action; + step_buffer[16]; + u32 step_count, step_action; + + GLuint vao, vbo; } vg_loader; -static int vg_loader_init(void) +VG_STATIC void vg_loader_init(void) { - return 1; + 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 }; + + glGenVertexArrays( 1, &vg_loader.vao ); + glGenBuffers( 1, &vg_loader.vbo ); + glBindVertexArray( vg_loader.vao ); + glBindBuffer( GL_ARRAY_BUFFER, vg_loader.vbo ); + glBufferData( GL_ARRAY_BUFFER, sizeof(quad), quad, GL_STATIC_DRAW ); + glBindVertexArray( vg_loader.vao ); + glVertexAttribPointer( 0, 2, GL_FLOAT, GL_FALSE, sizeof(float)*2, (void*)0 ); + glEnableVertexAttribArray( 0 ); + + VG_CHECK_GL_ERR(); + + if( !vg_shader_compile( &_shader_loader ) ) + vg_fatal_exit_loop( "failed to compile shader" ); } -static void vg_loader_free(void) +VG_STATIC void vg_loader_free(void) { vg_info( "vg_loader_free\n" ); + glDeleteVertexArrays( 1, &vg_loader.vao ); + glDeleteBuffers( 1, &vg_loader.vbo ); for( int i=0; ifn_free( step->data ); } - vg_free( vg_loader.step_buffer ); vg_info( "done\n" ); } -static float hue_to_rgb( float p, float q, float t ) +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; @@ -57,36 +113,22 @@ static float hue_to_rgb( float p, float q, float t ) return p; } -static void vg_loader_render(void) +VG_STATIC void vg_render_log(void) { - float h = vg_randf(), - s = 0.7f, - l = 0.1f, //* (0.5f+vg_fractf(vg_time*40.0)*0.5f), - q = l < 0.5f ? l * (1.0f + s) : l + s - l * s, - p = 2.0f * l - q, - r = hue_to_rgb( p, q, h + 1.0f/3.0f ), - g = hue_to_rgb( p, q, h ), - b = hue_to_rgb( p, q, h - 1.0f/3.0f ); - - glClearColor( r, g, b, 1.0f ); - glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT ); - - - - ui_begin( &ui_global_ctx, vg_window_x, vg_window_y ); - + ui_begin( vg.window_x, vg.window_y ); + vg_mutex_lock( &log_print_mutex ); int const fh = 14; - int lines_screen_max = ((vg_window_y/fh)-2), + int lines_screen_max = ((vg.window_y/fh)-2), lines_max_draw = VG_MIN( lines_screen_max, vg_list_size(vg_log.buffer) ), lines_to_draw = VG_MIN( lines_max_draw, vg_log.buffer_line_count ); int ptr = vg_log.buffer_line_current; - ui_global_ctx.cursor[0] = 0; - ui_global_ctx.cursor[1] = lines_to_draw*fh; - ui_global_ctx.cursor[3] = fh; - ui_fill_x( &ui_global_ctx ); + vg_uictx.cursor[0] = 0; + vg_uictx.cursor[1] = lines_to_draw*fh; + vg_uictx.cursor[3] = fh; + ui_fill_x(); for( int i=0; i