From f9d996a4603bef1f52e32e99f9f69a32b7c823ba Mon Sep 17 00:00:00 2001 From: "Owen W. Taylor" Date: Fri, 27 Feb 2009 13:39:53 -0500 Subject: [PATCH] Use COGL to establish GL state for ClutterGLXTexturePixmap Using glEnable() directly confuses COGL and can result in problems like subsequent pick operations not working correctly. Get the material for the ClutterTexture and call cogl_material_flush_gl_state() instead. http://bugzilla.openedhand.com/show_bug.cgi?id=1483 --- clutter/glx/clutter-glx-texture-pixmap.c | 26 ++++++++---------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/clutter/glx/clutter-glx-texture-pixmap.c b/clutter/glx/clutter-glx-texture-pixmap.c index ecc6e8dd9..71f667a76 100644 --- a/clutter/glx/clutter-glx-texture-pixmap.c +++ b/clutter/glx/clutter-glx-texture-pixmap.c @@ -126,26 +126,18 @@ G_DEFINE_TYPE (ClutterGLXTexturePixmap, \ static gboolean texture_bind (ClutterGLXTexturePixmap *tex) { - GLuint handle = 0; - GLenum target = 0; + CoglHandle cogl_material; CoglHandle cogl_tex; + + /* It might be better to track if we've succesfully set a texture yet + * explicitly, rather than doing it indirectly like this. + */ cogl_tex = clutter_texture_get_cogl_texture (CLUTTER_TEXTURE(tex)); + if (cogl_tex == COGL_INVALID_HANDLE) + return FALSE; - if (!cogl_texture_get_gl_texture (cogl_tex, &handle, &target)) - return FALSE; - - glEnable(target); - - /* FIXME: fire off an error here? */ - glBindTexture (target, handle); - - if (clutter_texture_get_filter_quality (CLUTTER_TEXTURE (tex)) - == CLUTTER_TEXTURE_QUALITY_HIGH && tex->priv->can_mipmap) - { - cogl_texture_set_filters (cogl_tex, - CGL_LINEAR_MIPMAP_LINEAR, - CGL_LINEAR); - } + cogl_material = clutter_texture_get_cogl_material (CLUTTER_TEXTURE(tex)); + cogl_material_flush_gl_state (cogl_material, NULL); return TRUE; }