--- deliantra/Deliantra-Client/Client.xs 2007/04/16 21:06:36 1.181 +++ deliantra/Deliantra-Client/Client.xs 2007/04/21 09:25:31 1.186 @@ -402,12 +402,17 @@ #define SDLK_MODIFIER_MIN 300 #define SDLK_MODIFIER_MAX 314 +static AV *texture_av; + MODULE = CFPlus PACKAGE = CFPlus PROTOTYPES: ENABLE BOOT: { + texture_av = newAV (); + AvREAL_off (texture_av); + HV *stash = gv_stashpv ("CFPlus", 1); static const struct { const char *name; @@ -1462,8 +1467,8 @@ cell->stat_width = *data++ + 1; else if (cmd == 0x47) { - if (*data == 8) - ; // decode player uuid + if (*data == 4) + ; // decode player count data += *data + 1; } @@ -2372,7 +2377,10 @@ CODE: { GLuint name; - glGenTextures (1, &name); + if (AvFILL (texture_av) >= 0) + name = (GLuint)av_pop (texture_av); + else + glGenTextures (1, &name); RETVAL = name; } OUTPUT: @@ -2381,8 +2389,12 @@ void glDeleteTexture (int name) CODE: { - GLuint name_ = name; - glDeleteTextures (1, &name_); + /* make a half-assed attempt at returning the memory used by the texture */ + /* textures are frequently being reused by cfplus anyway */ + glBindTexture (GL_TEXTURE_2D, name); + glTexImage2D (GL_TEXTURE_2D, 0, GL_ALPHA, 0, 0, 0, GL_ALPHA, GL_UNSIGNED_BYTE, 0); + av_push (texture_av, (SV *)name); + /*glDeleteTextures (1, &name_);*/ } int glGenList ()