medium sized dollop
[vg.git] / src / vg / vg_shader.h
index 3cad2356b1d35077027c1d983f87bda576ae5b4c..a6c7a0b13ff4723e86927dd3d15e04513225fb4c 100644 (file)
@@ -3,6 +3,9 @@
 #ifndef VG_SHADER_H
 #define VG_SHADER_H
 
+#include "vg/vg.h"
+#include "vg/vg_platform.h"
+
 #define STB_INCLUDE_IMPLEMENTATION
 #define STB_INCLUDE_LINE_GLSL
 #include "stb/stb_include.h"
@@ -151,7 +154,16 @@ static int vg_shader_compile( struct vg_shader *shader )
        return 1;
 }
 
-static void vg_shaders_free(void)
+static void vg_free_shader( struct vg_shader *shader )
+{
+   if( shader->compiled )
+   {
+      glDeleteProgram( shader->id );
+      shader->compiled = 0;
+   }
+}
+
+static void vg_shaders_free(void *nothing)
 {
        for( int i = 0; i < arrlen( vg_shaders_active ); i ++ )
        {
@@ -164,16 +176,19 @@ static void vg_shaders_free(void)
        arrfree( vg_shaders_active );
 }
 
-static int vg_shaders_recompile(int argc, const char *argv[])
+static int vg_shaders_recompile(void)
 {
        vg_info( "Compiling shaders\n" );
-       for( int i = 0; i < arrlen( vg_shaders_active ); i ++ )
+
+       for( int i=0; i<arrlen( vg_shaders_active ); i ++ )
        {
                struct vg_shader *shader = vg_shaders_active[i];
-               vg_shader_compile( shader );
+
+               if( !vg_shader_compile( shader ) )
+         return 0;
        }
 
-   return 0;
+   return 1;
 }
 
 static void vg_shader_register( struct vg_shader *shader )