From 913c187f4e611aac71360863ca67640e4cfd1d41 Mon Sep 17 00:00:00 2001 From: "Owen W. Taylor" Date: Tue, 16 Mar 2010 20:38:53 -0400 Subject: [PATCH] Switch texture units before calling _cogl_texture_set_filters() 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 --- clutter/cogl/cogl/cogl-material.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/clutter/cogl/cogl/cogl-material.c b/clutter/cogl/cogl/cogl-material.c index 9770c0c34..57ab82fd5 100644 --- a/clutter/cogl/cogl/cogl-material.c +++ b/clutter/cogl/cogl/cogl-material.c @@ -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