Fix major overstep with last commit
[vg.git] / src / vg / vg_shader.h
index a6c7a0b13ff4723e86927dd3d15e04513225fb4c..2186c9dace606b9e3e8b3e54dc4b1d9e9b3f39bc 100644 (file)
@@ -8,10 +8,14 @@
 
 #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"
 
 const char *vg_shader_gl_ver = "#version 330 core\n";
 
+static
 struct vg_shader
 {
        GLuint id;
@@ -28,6 +32,8 @@ struct vg_shader
    int compiled;
 }
 ** vg_shaders_active = NULL;
+static u32 vg_shader_count,
+           vg_shader_cap;
 
 static GLuint vg_shader_subshader( const char *src, GLint gliShaderType )
 {
@@ -101,8 +107,8 @@ 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;
       }
 
@@ -115,8 +121,8 @@ static int vg_shader_compile( struct vg_shader *shader )
        
    if( !static_src )
    {
-      free( avs );
-      free( afs );
+      vg_free( avs );
+      vg_free( afs );
    }
 
        if( !vert || !frag )
@@ -165,7 +171,7 @@ static void vg_free_shader( struct vg_shader *shader )
 
 static void vg_shaders_free(void *nothing)
 {
-       for( int i = 0; i < arrlen( vg_shaders_active ); i ++ )
+       for( int i=0; i<vg_shader_count; i ++ )
        {
                struct vg_shader *shader = vg_shaders_active[i];
                
@@ -173,14 +179,14 @@ static void vg_shaders_free(void *nothing)
                        glDeleteProgram( shader->id );
        }
        
-       arrfree( vg_shaders_active );
+       vg_free( vg_shaders_active );
 }
 
 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<vg_shader_count; i ++ )
        {
                struct vg_shader *shader = vg_shaders_active[i];
 
@@ -195,7 +201,11 @@ static void vg_shader_register( struct vg_shader *shader )
 {
    shader->compiled = 0;
    shader->id = 0;         /* TODO: make this an error shader */
-   arrpush( vg_shaders_active, shader );
+   vg_shaders_active = buffer_reserve( vg_shaders_active, vg_shader_count,
+                                       &vg_shader_cap, 1, 
+                                       sizeof( struct vg_shader * ) );
+
+   vg_shaders_active[ vg_shader_count ++ ] = shader;
 }
 
 #endif /* VG_SHADER_H */