X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=src%2Fvg%2Fvg_shader.h;h=516d1a84c67587c7e44d56fe2853c870de252138;hb=9917df2d289c6c35d6bf54319aed3aed421b53f1;hp=3cad2356b1d35077027c1d983f87bda576ae5b4c;hpb=94b61bed97af43179b37593f4453a05d03687cbc;p=vg.git diff --git a/src/vg/vg_shader.h b/src/vg/vg_shader.h index 3cad235..516d1a8 100644 --- a/src/vg/vg_shader.h +++ b/src/vg/vg_shader.h @@ -3,30 +3,45 @@ #ifndef VG_SHADER_H #define VG_SHADER_H +#include "vg/vg.h" +#include "vg/vg_platform.h" + +#if 0 #define STB_INCLUDE_IMPLEMENTATION #define STB_INCLUDE_LINE_GLSL +#define STB_MALLOC vg_alloc +#define STB_FREE vg_free +#define STB_REALLOC vg_realloc #include "stb/stb_include.h" +#endif const char *vg_shader_gl_ver = "#version 330 core\n"; -struct vg_shader -{ - GLuint id; - const char *name; +typedef struct vg_shader vg_shader; - struct vg_subshader +struct +{ + struct vg_shader { - const char *orig_file, - *static_src; - } - vs, fs; + GLuint id; + const char *name; + + struct vg_subshader + { + const char *orig_file, + *static_src; + } + vs, fs; - void (*link)(void); - int compiled; + void (*link)(void); + int compiled; + } + * shaders[32]; + u32 count; } -** vg_shaders_active = NULL; +static vg_shaders; -static GLuint vg_shader_subshader( const char *src, GLint gliShaderType ) +VG_STATIC GLuint vg_shader_subshader( const char *src, GLint gliShaderType ) { GLint shader = glCreateShader( gliShaderType ); @@ -55,7 +70,7 @@ static GLuint vg_shader_subshader( const char *src, GLint gliShaderType ) return shader; } -static int vg_shader_compile( struct vg_shader *shader ) +VG_STATIC int vg_shader_compile( struct vg_shader *shader ) { vg_info( "Compile shader '%s'\n", shader->name ); @@ -85,6 +100,9 @@ static int vg_shader_compile( struct vg_shader *shader ) } else { + vg_fatal_exit_loop( "Unimplemented" ); + +#if 0 char error[260]; char path[260]; strcpy( path, shader->vs.orig_file ); @@ -98,23 +116,26 @@ static int vg_shader_compile( struct vg_shader *shader ) vg_error( "Could not find shader source files (%s)\n", shader->vs.orig_file ); - free( avs ); - free( afs ); + vg_free( avs ); + vg_free( afs ); return 0; } svs = avs; sfs = afs; +#endif } vert = vg_shader_subshader( svs, GL_VERTEX_SHADER ); frag = vg_shader_subshader( sfs, GL_FRAGMENT_SHADER ); +#if 0 if( !static_src ) { free( avs ); free( afs ); } +#endif if( !vert || !frag ) return 0; @@ -151,36 +172,48 @@ static int vg_shader_compile( struct vg_shader *shader ) return 1; } -static void vg_shaders_free(void) +VG_STATIC void vg_free_shader( struct vg_shader *shader ) { - for( int i = 0; i < arrlen( vg_shaders_active ); i ++ ) - { - struct vg_shader *shader = vg_shaders_active[i]; - - if( shader->compiled ) - glDeleteProgram( shader->id ); - } - - arrfree( vg_shaders_active ); + if( shader->compiled ) + { + glDeleteProgram( shader->id ); + shader->compiled = 0; + } } -static int vg_shaders_recompile(int argc, const char *argv[]) +VG_STATIC void vg_shaders_compile(void) { vg_info( "Compiling shaders\n" ); - for( int i = 0; i < arrlen( vg_shaders_active ); i ++ ) + + for( int i=0; icompiled = 0; shader->id = 0; /* TODO: make this an error shader */ - arrpush( vg_shaders_active, shader ); + vg_shaders.shaders[ vg_shaders.count ++ ] = shader; } #endif /* VG_SHADER_H */