Refactor the loop in unbind_texobj_from_texunits.
authorIan Romanick <idr@us.ibm.com>
Thu, 10 May 2007 04:51:49 +0000 (21:51 -0700)
committerIan Romanick <idr@us.ibm.com>
Thu, 10 May 2007 15:20:41 +0000 (08:20 -0700)
Common code was pulled out of the per-target if-statment and put at the end
of the for-loop.  The common code is guarded by a new variable, curr, that
is set to point to the unit's current target in each if-statement.

src/mesa/main/texobj.c

index 3cfbfa5eb549b65753f435850faf8fd092bdf1bd..56d816e45f711c10b68d28a2ce83c539bbeefb41 100644 (file)
@@ -630,40 +630,34 @@ unbind_texobj_from_texunits(GLcontext *ctx, struct gl_texture_object *texObj)
 
    for (u = 0; u < MAX_TEXTURE_IMAGE_UNITS; u++) {
       struct gl_texture_unit *unit = &ctx->Texture.Unit[u];
+      struct gl_texture_object **curr = NULL;
+
       if (texObj == unit->Current1D) {
+         curr = &unit->Current1D;
          unit->Current1D = ctx->Shared->Default1D;
-         ctx->Shared->Default1D->RefCount++;
-         texObj->RefCount--;
-         if (texObj == unit->_Current)
-            unit->_Current = unit->Current1D;
       }
       else if (texObj == unit->Current2D) {
+         curr = &unit->Current2D;
          unit->Current2D = ctx->Shared->Default2D;
-         ctx->Shared->Default2D->RefCount++;
-         texObj->RefCount--;
-         if (texObj == unit->_Current)
-            unit->_Current = unit->Current2D;
       }
       else if (texObj == unit->Current3D) {
+         curr = &unit->Current3D;
          unit->Current3D = ctx->Shared->Default3D;
-         ctx->Shared->Default3D->RefCount++;
-         texObj->RefCount--;
-         if (texObj == unit->_Current)
-            unit->_Current = unit->Current3D;
       }
       else if (texObj == unit->CurrentCubeMap) {
+         curr = &unit->CurrentCubeMap;
          unit->CurrentCubeMap = ctx->Shared->DefaultCubeMap;
-         ctx->Shared->DefaultCubeMap->RefCount++;
-         texObj->RefCount--;
-         if (texObj == unit->_Current)
-            unit->_Current = unit->CurrentCubeMap;
       }
       else if (texObj == unit->CurrentRect) {
+         curr = &unit->CurrentRect;
          unit->CurrentRect = ctx->Shared->DefaultRect;
-         ctx->Shared->DefaultRect->RefCount++;
+      }
+
+      if (curr) {
+         (*curr)->RefCount++;
          texObj->RefCount--;
          if (texObj == unit->_Current)
-            unit->_Current = unit->CurrentRect;
+            unit->_Current = *curr;
       }
    }
 }