Switch texture units before calling _cogl_texture_set_filters()
authorOwen W. Taylor <otaylor@fishsoup.net>
Wed, 17 Mar 2010 00:38:53 +0000 (20:38 -0400)
committerEmmanuele Bassi <ebassi@linux.intel.com>
Fri, 19 Mar 2010 11:23:48 +0000 (11:23 +0000)
When setting up the state for a layer, we need to switch texture
units before we do anything that might bind the texture, or
we'll bind the wrong texture to the previous unit.

http://bugzilla.openedhand.com/show_bug.cgi?id=2033

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
clutter/cogl/cogl/cogl-material.c

index 9770c0c..57ab82f 100644 (file)
@@ -1402,6 +1402,12 @@ _cogl_material_flush_layers_gl_state (CoglMaterial *material,
       GLenum             gl_target;
       CoglTextureUnit   *unit;
 
+      /* Switch units first so we don't disturb the previous unit if
+       * something needs to bind the texture temporarily */
+      GE (glActiveTexture (GL_TEXTURE0 + i));
+
+      unit = _cogl_get_texture_unit (i);
+
       _cogl_material_layer_ensure_mipmaps (layer_handle);
 
       new_gl_layer_info.layer0_overridden =
@@ -1447,9 +1453,6 @@ _cogl_material_flush_layers_gl_state (CoglMaterial *material,
           cogl_texture_get_gl_texture (tex_handle, &gl_texture, NULL);
         }
 
-      GE (glActiveTexture (GL_TEXTURE0 + i));
-      unit = _cogl_get_texture_unit (i);
-
       /* FIXME: We could be more clever here and only bind the texture
          if it is different from gl_layer_info->gl_texture to avoid
          redundant GL calls. However a few other places in Cogl and