From c4dcbb6bdba91fbc20b7654fe98fd92a5adbb44c Mon Sep 17 00:00:00 2001 From: Neil Roberts Date: Thu, 19 Mar 2009 17:48:15 +0000 Subject: [PATCH] Revert "Use COGL to establish GL state for ClutterGLXTexturePixmap" This reverts commit f9d996a4603bef1f52e32e99f9f69a32b7c823ba. The change from calling glBindTexture to using the material API with cogl_material_flush_gl_state does not always work because it doesn't necessarily leave the active texture unit as GL_TEXTURE0. For example, if the previously rendered texture was multi-layered then the last thing cogl_material_flush_gl_state will do is select GL_TEXTURE1 just to disable it. --- clutter/glx/clutter-glx-texture-pixmap.c | 26 ++++++++++++++++-------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/clutter/glx/clutter-glx-texture-pixmap.c b/clutter/glx/clutter-glx-texture-pixmap.c index 71f667a76..ecc6e8dd9 100644 --- a/clutter/glx/clutter-glx-texture-pixmap.c +++ b/clutter/glx/clutter-glx-texture-pixmap.c @@ -126,18 +126,26 @@ G_DEFINE_TYPE (ClutterGLXTexturePixmap, \ static gboolean texture_bind (ClutterGLXTexturePixmap *tex) { - CoglHandle cogl_material; + GLuint handle = 0; + GLenum target = 0; 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; - cogl_material = clutter_texture_get_cogl_material (CLUTTER_TEXTURE(tex)); - cogl_material_flush_gl_state (cogl_material, NULL); + 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); + } return TRUE; }