X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=src%2Fvg%2Fvg_tex.h;h=e92e5f152582258af9b0c73d59713a68f1be8764;hb=367883958336d1c04c8a304af6119b21f0f2f15a;hp=33e074ef59b6736f8f45186028e8a4d78a8d6c56;hpb=95c9a820474d4974ee394f2fcfae82fbfa367dbd;p=vg.git diff --git a/src/vg/vg_tex.h b/src/vg/vg_tex.h index 33e074e..e92e5f1 100644 --- a/src/vg/vg_tex.h +++ b/src/vg/vg_tex.h @@ -1,9 +1,21 @@ /* Copyright (C) 2021-2022 Harry Godden (hgn) - All Rights Reserved */ +#ifndef VG_TEX_H +#define VG_TEX_H + +#include "vg/vg.h" +#include "vg/vg_log.h" #define VG_TEXTURE_NO_MIP 0x1 #define VG_TEXTURE_REPEAT 0x2 #define VG_TEXTURE_CLAMP 0x4 #define VG_TEXTURE_NEAREST 0x8 +#define VG_TEXTURE_ALLOCATED_INTERNAL 0x10 + +#define QOI_IMPLEMENTATION +#define QOI_MALLOC vg_alloc +#define QOI_FREE vg_free + +#include "phoboslab/qoi.h" struct vg_tex2d { @@ -19,6 +31,12 @@ struct vg_sprite static void vg_tex2d_bind( vg_tex2d *tex, u32 id ) { + if( !(tex->flags & VG_TEXTURE_ALLOCATED_INTERNAL) ) + { + vg_error( "Tried to use '%s' while unloaded!\n", tex->path ); + return; + } + glActiveTexture( GL_TEXTURE0 + id ); glBindTexture( GL_TEXTURE_2D, tex->name ); } @@ -76,8 +94,8 @@ static GLuint vg_tex2d_rgba( const char *path ) glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, info.width, info.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, tex_buffer ); - free( tex_buffer ); - free( src_data ); + vg_free( tex_buffer ); + vg_free( src_data ); } else { @@ -99,7 +117,7 @@ static GLuint vg_tex2d_rgba( const char *path ) static void vg_tex2d_init( vg_tex2d *textures[], int num ) { - for( int i = 0; i < num; i ++ ) + for( int i=0; iname = vg_tex2d_rgba( tex->path ); @@ -125,6 +143,8 @@ static void vg_tex2d_init( vg_tex2d *textures[], int num ) vg_tex2d_clamp(); else vg_tex2d_repeat(); + + tex->flags |= VG_TEXTURE_ALLOCATED_INTERNAL; } } @@ -135,3 +155,5 @@ static void vg_tex2d_free( vg_tex2d *textures[], int num ) glDeleteTextures( 1, &textures[i]->name ); } } + +#endif /* VG_TEX_H */