move explicit bezier to vg
[vg.git] / vg_build_utils_shader.h
index cb4cc4b8894ef5f488f1e0430a4007ea470b9458..235c67c04f6f156b8a9d3f87800a184c35692642 100644 (file)
@@ -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<vg_list_size(types); j ++ )
+      for( int j=0; j<VG_ARRAY_LEN(types); j ++ )
       {
          struct type_info *inf = &types[j];
 
@@ -276,3 +281,10 @@ int vg_build_shader( char *src_vert, /* path/to/vert.vs    */
    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" );
+}