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 */
{
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;
}
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" );
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" );
{
{ "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);" },
if( uf->array )
continue;
- for( int j=0; j<vg_list_size(types); j ++ )
+ for( int j=0; j<VG_ARRAY_LEN(types); j ++ )
{
struct type_info *inf = &types[j];
fclose( header );
return 1;
}
+
+void vg_build_postprocess_shaders(void)
+{
+ _S( "blit", "../vg/shaders/blit.vs", "../vg/shaders/blit_tex.fs" );
+ _S( "blitblur", "../vg/shaders/blit.vs", "../vg/shaders/blit_blur.fs" );
+ _S( "blitcolour","../vg/shaders/blit.vs", "../vg/shaders/blit_colour.fs" );
+}