X-Git-Url: https://harrygodden.com/git/?p=vg.git;a=blobdiff_plain;f=vg_build_utils_shader.h;h=1c81c41822dd0532a4273c14bebdae3d97a3ea54;hp=cb4cc4b8894ef5f488f1e0430a4007ea470b9458;hb=HEAD;hpb=7108996fc9e1baebc3b3f09e950ce08487f9d5a6 diff --git a/vg_build_utils_shader.h b/vg_build_utils_shader.h index cb4cc4b..235c67c 100644 --- a/vg_build_utils_shader.h +++ b/vg_build_utils_shader.h @@ -136,20 +136,27 @@ static int compile_subshader( vg_str *str, char *name ) void vg_build_shader_impl( char *path ) { FILE *fp = fopen( path, "w" ); - fputs( vg_shaderbuild.code_function_body.buffer, fp ); + + if( vg_shaderbuild.code_function_body.buffer ) + fputs( vg_shaderbuild.code_function_body.buffer, fp ); fputs( "\n\n", fp ); fputs( "void vg_auto_shader_link(void)\n{\n", fp ); - fputs( vg_shaderbuild.code_link.buffer, fp ); + if( vg_shaderbuild.code_link.buffer ) + fputs( vg_shaderbuild.code_link.buffer, fp ); fputs( "}\n\n", fp ); fputs( "void vg_auto_shader_register(void)\n{\n", fp ); - fputs( vg_shaderbuild.code_register.buffer, fp ); + if( vg_shaderbuild.code_register.buffer ) + fputs( vg_shaderbuild.code_register.buffer, fp ); fputs( "}\n\n", fp ); fclose( fp ); } +#define _S( NAME, VS, FS ) \ + vg_build_shader( "shaders/" VS, "shaders/" FS, NULL, "shaders", NAME ) + int vg_build_shader( char *src_vert, /* path/to/vert.vs */ char *src_frag, /* path/to/frag.fs */ char *src_geo, /* unused currently */ @@ -158,9 +165,9 @@ int vg_build_shader( char *src_vert, /* path/to/vert.vs */ { if( !vg_shaderbuild.init ) { - vg_strnull( &vg_shaderbuild.code_link, NULL, -1 ); - vg_strnull( &vg_shaderbuild.code_register, NULL, -1 ); - vg_strnull( &vg_shaderbuild.code_function_body, NULL, -1 ); + vg_strnull( &vg_shaderbuild.code_link, NULL, 0 ); + vg_strnull( &vg_shaderbuild.code_register, NULL, 0 ); + vg_strnull( &vg_shaderbuild.code_function_body, NULL, 0 ); vg_shaderbuild.init = 1; } @@ -180,10 +187,7 @@ int vg_build_shader( char *src_vert, /* path/to/vert.vs */ FILE *header = fopen( path_header, "w" ); if( !header ) - { - fprintf(stderr, "Could not open '%s'\n", path_header ); - return 0; - } + vg_fatal_error( "Could not open '%s'\n", path_header ); fprintf( header, "#pragma once\n" ); fprintf( header, "#include \"vg/vg_engine.h\"\n" ); @@ -197,14 +201,14 @@ int vg_build_shader( char *src_vert, /* path/to/vert.vs */ if( !compile_subshader( c_body, src_vert ) ) { fclose( header ); - return 0; + vg_fatal_error( "Failed to assemble vertex source code" ); } vg_strcatf( c_body, "\n .fs = \n" ); if( !compile_subshader( c_body, src_frag ) ) { fclose( header ); - return 0; + vg_fatal_error( "Failed to assemble fragment source code" ); } vg_strcatf( c_body, "\n};\n\n" ); @@ -226,6 +230,7 @@ int vg_build_shader( char *src_vert, /* path/to/vert.vs */ { { "float", "f32 f", "glUniform1f(%s,f);" }, { "bool", "int b", "glUniform1i(%s,b);" }, + { "int", "int b", "glUniform1i(%s,b);" }, { "vec2", "v2f v", "glUniform2fv(%s,1,v);" }, { "vec3", "v3f v", "glUniform3fv(%s,1,v);" }, { "vec4", "v4f v", "glUniform4fv(%s,1,v);" }, @@ -243,7 +248,7 @@ int vg_build_shader( char *src_vert, /* path/to/vert.vs */ if( uf->array ) continue; - for( int j=0; j