ARB prog lexer: Fix lexer to eat both DOS and Unix line endings
[mesa.git] / src / mesa / main / texstate.c
index 32d55ba8d58ed5e18f062204dfa8fe26600c4dd3..6e0c0c688a19ac3171b7e1b86936ffbbab5f038c 100644 (file)
@@ -561,13 +561,19 @@ update_texture_state( GLcontext *ctx )
       }
 
       if (!texUnit->_ReallyEnabled) {
-         /* If we get here it means the shader (or fixed-function state)
-          * is expecting a texture object, but there isn't one (or it's
-          * incomplete).  Use the fallback texture.
-          */
-         struct gl_texture_object *texObj = _mesa_get_fallback_texture(ctx);
-         texUnit->_ReallyEnabled = 1 << TEXTURE_2D_INDEX;
-         _mesa_reference_texobj(&texUnit->_Current, texObj);
+         if (fprog) {
+            /* If we get here it means the shader is expecting a texture
+             * object, but there isn't one (or it's incomplete).  Use the
+             * fallback texture.
+             */
+            struct gl_texture_object *texObj = _mesa_get_fallback_texture(ctx);
+            texUnit->_ReallyEnabled = 1 << TEXTURE_2D_INDEX;
+            _mesa_reference_texobj(&texUnit->_Current, texObj);
+         }
+         else {
+            /* fixed-function: texture unit is really disabled */
+            continue;
+         }
       }
 
       /* if we get here, we know this texture unit is enabled */
@@ -785,6 +791,9 @@ _mesa_free_texture_data(GLcontext *ctx)
 
    /* unreference current textures */
    for (u = 0; u < MAX_TEXTURE_IMAGE_UNITS; u++) {
+      /* The _Current texture could account for another reference */
+      _mesa_reference_texobj(&ctx->Texture.Unit[u]._Current, NULL);
+
       for (tgt = 0; tgt < NUM_TEXTURE_TARGETS; tgt++) {
          _mesa_reference_texobj(&ctx->Texture.Unit[u].CurrentTex[tgt], NULL);
       }