X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=vg%2Fvg_tex.h;h=967337a8fa1a1e40cdbf3296a1347d08e445094c;hb=18aa936b41a102700b6fc9fc9f0ac49712a0fced;hp=742493b5720d8bfc4a873f864c9b209deb3ecee8;hpb=2224e74bdfc8e19a2de99645246daf671d4323b4;p=fishladder.git diff --git a/vg/vg_tex.h b/vg/vg_tex.h index 742493b..967337a 100644 --- a/vg/vg_tex.h +++ b/vg/vg_tex.h @@ -1,5 +1,23 @@ // Copyright (C) 2021 Harry Godden (hgn) - All Rights Reserved +#define VG_TEXTURE_NO_MIP 0x1 +#define VG_TEXTURE_REPEAT 0x2 +#define VG_TEXTURE_CLAMP 0x4 +#define VG_TEXTURE_NEAREST 0x8 + +struct vg_tex2d +{ + const char *path; + u32 flags; + GLuint name; +}; + +static void vg_tex2d_bind( vg_tex2d *tex, u32 id ) +{ + glActiveTexture( GL_TEXTURE0 + id ); + glBindTexture( GL_TEXTURE_2D, tex->name ); +} + static inline void vg_tex2d_mipmap(void) { glGenerateMipmap( GL_TEXTURE_2D ); @@ -71,3 +89,42 @@ static GLuint vg_tex2d_rgba( const char *path ) return texture_name; } + +static void vg_tex2d_init( vg_tex2d *textures[], int num ) +{ + for( int i = 0; i < num; i ++ ) + { + vg_tex2d *tex = textures[i]; + tex->name = vg_tex2d_rgba( tex->path ); + if( !(tex->flags & VG_TEXTURE_NO_MIP) ) + vg_tex2d_mipmap(); + + if( tex->flags & VG_TEXTURE_NEAREST ) + { + if( tex->flags & VG_TEXTURE_NO_MIP ) + vg_error( "Invalid texture settings\n" ); + else + vg_tex2d_nearest(); + } + else + { + if( tex->flags & VG_TEXTURE_NO_MIP ) + vg_tex2d_linear(); + else + vg_tex2d_linear_mipmap(); + } + + if( tex->flags & VG_TEXTURE_CLAMP ) + vg_tex2d_clamp(); + else + vg_tex2d_repeat(); + } +} + +static void vg_tex2d_free( vg_tex2d *textures[], int num ) +{ + for( int i = 0; i < num; i ++ ) + { + glDeleteTextures( 1, &textures[i]->name ); + } +}