From 59d6da5365c876ba18a66cd51ed52b0e1d96704e Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Sat, 12 Feb 2000 01:59:19 +0000 Subject: [PATCH] fixed reference count but in DeleteTextures() --- src/mesa/main/texobj.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c index b24470e8933..f782212a16c 100644 --- a/src/mesa/main/texobj.c +++ b/src/mesa/main/texobj.c @@ -1,4 +1,4 @@ -/* $Id: texobj.c,v 1.13 2000/01/31 23:11:39 brianp Exp $ */ +/* $Id: texobj.c,v 1.14 2000/02/12 01:59:19 brianp Exp $ */ /* * Mesa 3-D graphics library @@ -376,26 +376,29 @@ _mesa_DeleteTextures( GLsizei n, const GLuint *texName) t = (struct gl_texture_object *) _mesa_HashLookup(ctx->Shared->TexObjects, texName[i]); if (t) { + /* First check if this texture is currently bound. + * If so, unbind it and decrement the reference count. + */ GLuint u; - for (u=0; uTexture.Unit[u]; GLuint d; for (d = 1 ; d <= 3 ; d++) { - if (unit->CurrentD[d]==t) { + if (unit->CurrentD[d] == t) { unit->CurrentD[d] = ctx->Shared->DefaultD[d]; ctx->Shared->DefaultD[d]->RefCount++; t->RefCount--; - assert( t->RefCount >= 0 ); + ASSERT( t->RefCount >= 0 ); } } } - /* tell device driver to delete texture */ - if (ctx->Driver.DeleteTexture) { - (*ctx->Driver.DeleteTexture)( ctx, t ); - } - - if (t->RefCount==0) { + /* Decrement reference count and delete if zero */ + t->RefCount--; + ASSERT( t->RefCount >= 0 ); + if (t->RefCount == 0) { + if (ctx->Driver.DeleteTexture) + (*ctx->Driver.DeleteTexture)( ctx, t ); gl_free_texture_object(ctx->Shared, t); } } -- 2.30.2