mirror of
https://github.com/brl/mutter.git
synced 2024-12-23 03:22:04 +00:00
2008-06-10 Matthew Allum <mallum@openedhand.com>
* clutter/clutter-texture.c: Minor reformatting cleanups. Emit filter-quality prop on change. * clutter/glx/clutter-glx-texture-pixmap.c: Support mipmaps via filter quality prop.
This commit is contained in:
parent
cf73a8db77
commit
5d9e1bbbb0
@ -1,3 +1,10 @@
|
|||||||
|
2008-06-10 Matthew Allum <mallum@openedhand.com>
|
||||||
|
|
||||||
|
* clutter/clutter-texture.c:
|
||||||
|
Minor reformatting cleanups. Emit filter-quality prop on change.
|
||||||
|
* clutter/glx/clutter-glx-texture-pixmap.c:
|
||||||
|
Support mipmaps via filter quality prop.
|
||||||
|
|
||||||
2008-06-10 Chris Lord <chris@openedhand.com>
|
2008-06-10 Chris Lord <chris@openedhand.com>
|
||||||
|
|
||||||
* tests/Makefile.am:
|
* tests/Makefile.am:
|
||||||
|
@ -266,16 +266,17 @@ clutter_texture_realize (ClutterActor *actor)
|
|||||||
if (priv->texture != COGL_INVALID_HANDLE)
|
if (priv->texture != COGL_INVALID_HANDLE)
|
||||||
cogl_texture_unref (priv->texture);
|
cogl_texture_unref (priv->texture);
|
||||||
|
|
||||||
priv->texture = cogl_texture_new_with_size
|
priv->texture
|
||||||
(priv->width,
|
= cogl_texture_new_with_size
|
||||||
priv->height,
|
(priv->width,
|
||||||
priv->no_slice ? -1 : priv->max_tile_waste,
|
priv->height,
|
||||||
priv->filter_quality == CLUTTER_TEXTURE_QUALITY_HIGH,
|
priv->no_slice ? -1 : priv->max_tile_waste,
|
||||||
COGL_PIXEL_FORMAT_RGBA_8888);
|
priv->filter_quality == CLUTTER_TEXTURE_QUALITY_HIGH,
|
||||||
|
COGL_PIXEL_FORMAT_RGBA_8888);
|
||||||
|
|
||||||
cogl_texture_set_filters (priv->texture,
|
cogl_texture_set_filters (priv->texture,
|
||||||
clutter_texture_quality_to_cogl_min_filter (priv->filter_quality),
|
clutter_texture_quality_to_cogl_min_filter (priv->filter_quality),
|
||||||
clutter_texture_quality_to_cogl_mag_filter (priv->filter_quality));
|
clutter_texture_quality_to_cogl_mag_filter (priv->filter_quality));
|
||||||
|
|
||||||
priv->fbo_handle = cogl_offscreen_new_to_texture (priv->texture);
|
priv->fbo_handle = cogl_offscreen_new_to_texture (priv->texture);
|
||||||
|
|
||||||
@ -600,9 +601,6 @@ clutter_texture_class_init (ClutterTextureClass *klass)
|
|||||||
FALSE,
|
FALSE,
|
||||||
CLUTTER_PARAM_READWRITE));
|
CLUTTER_PARAM_READWRITE));
|
||||||
|
|
||||||
/* FIXME: Ideally this option needs to have some kind of global
|
|
||||||
* overide as to imporve performance.
|
|
||||||
*/
|
|
||||||
g_object_class_install_property
|
g_object_class_install_property
|
||||||
(gobject_class, PROP_FILTER_QUALITY,
|
(gobject_class, PROP_FILTER_QUALITY,
|
||||||
g_param_spec_enum ("filter-quality",
|
g_param_spec_enum ("filter-quality",
|
||||||
@ -757,7 +755,8 @@ clutter_scriptable_iface_init (ClutterScriptableIface *iface)
|
|||||||
parent_scriptable_iface = g_type_interface_peek_parent (iface);
|
parent_scriptable_iface = g_type_interface_peek_parent (iface);
|
||||||
|
|
||||||
if (!parent_scriptable_iface)
|
if (!parent_scriptable_iface)
|
||||||
parent_scriptable_iface = g_type_default_interface_peek (CLUTTER_TYPE_SCRIPTABLE);
|
parent_scriptable_iface = g_type_default_interface_peek
|
||||||
|
(CLUTTER_TYPE_SCRIPTABLE);
|
||||||
|
|
||||||
iface->set_custom_property = clutter_texture_set_custom_property;
|
iface->set_custom_property = clutter_texture_set_custom_property;
|
||||||
}
|
}
|
||||||
@ -802,6 +801,7 @@ clutter_texture_save_to_local_data (ClutterTexture *texture)
|
|||||||
pixel_format = cogl_texture_get_format (priv->texture);
|
pixel_format = cogl_texture_get_format (priv->texture);
|
||||||
priv->local_data_has_alpha = pixel_format & COGL_A_BIT;
|
priv->local_data_has_alpha = pixel_format & COGL_A_BIT;
|
||||||
bpp = priv->local_data_has_alpha ? 4 : 3;
|
bpp = priv->local_data_has_alpha ? 4 : 3;
|
||||||
|
|
||||||
/* Align to 4 bytes */
|
/* Align to 4 bytes */
|
||||||
priv->local_data_rowstride = (priv->local_data_width * bpp + 3) & ~3;
|
priv->local_data_rowstride = (priv->local_data_width * bpp + 3) & ~3;
|
||||||
|
|
||||||
@ -1175,6 +1175,8 @@ clutter_texture_set_from_file (ClutterTexture *texture,
|
|||||||
* @texture: A #ClutterTexture
|
* @texture: A #ClutterTexture
|
||||||
* @filter_quality: A filter quality value
|
* @filter_quality: A filter quality value
|
||||||
*
|
*
|
||||||
|
* FIXME: THIS IS WRONG FOR NEW API
|
||||||
|
*
|
||||||
* Sets the filter quality when scaling a texture. Only values 0 and 1
|
* Sets the filter quality when scaling a texture. Only values 0 and 1
|
||||||
* are currently supported, with 0 being lower quality but fast, 1
|
* are currently supported, with 0 being lower quality but fast, 1
|
||||||
* being better quality but slower. ( Currently just maps to
|
* being better quality but slower. ( Currently just maps to
|
||||||
@ -1202,8 +1204,6 @@ clutter_texture_set_filter_quality (ClutterTexture *texture,
|
|||||||
cogl_texture_set_filters (priv->texture,
|
cogl_texture_set_filters (priv->texture,
|
||||||
clutter_texture_quality_to_cogl_min_filter (priv->filter_quality),
|
clutter_texture_quality_to_cogl_min_filter (priv->filter_quality),
|
||||||
clutter_texture_quality_to_cogl_mag_filter (priv->filter_quality));
|
clutter_texture_quality_to_cogl_mag_filter (priv->filter_quality));
|
||||||
|
|
||||||
|
|
||||||
if ((old_quality == CLUTTER_TEXTURE_QUALITY_HIGH ||
|
if ((old_quality == CLUTTER_TEXTURE_QUALITY_HIGH ||
|
||||||
filter_quality == CLUTTER_TEXTURE_QUALITY_HIGH) &&
|
filter_quality == CLUTTER_TEXTURE_QUALITY_HIGH) &&
|
||||||
CLUTTER_ACTOR_IS_REALIZED (texture))
|
CLUTTER_ACTOR_IS_REALIZED (texture))
|
||||||
@ -1211,7 +1211,8 @@ clutter_texture_set_filter_quality (ClutterTexture *texture,
|
|||||||
clutter_texture_unrealize (CLUTTER_ACTOR (texture));
|
clutter_texture_unrealize (CLUTTER_ACTOR (texture));
|
||||||
clutter_texture_realize (CLUTTER_ACTOR (texture));
|
clutter_texture_realize (CLUTTER_ACTOR (texture));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_object_notify (G_OBJECT (texture), "filter-quality");
|
||||||
|
|
||||||
if (CLUTTER_ACTOR_IS_VISIBLE (texture))
|
if (CLUTTER_ACTOR_IS_VISIBLE (texture))
|
||||||
clutter_actor_queue_redraw (CLUTTER_ACTOR (texture));
|
clutter_actor_queue_redraw (CLUTTER_ACTOR (texture));
|
||||||
|
@ -424,13 +424,14 @@ clutter_glx_texture_pixmap_create_glx_pixmap (ClutterGLXTexturePixmap *texture)
|
|||||||
{
|
{
|
||||||
ClutterGLXTexturePixmapPrivate *priv = texture->priv;
|
ClutterGLXTexturePixmapPrivate *priv = texture->priv;
|
||||||
GLXPixmap glx_pixmap = None;
|
GLXPixmap glx_pixmap = None;
|
||||||
int attribs[7], i = 0;
|
int attribs[7], i = 0, mipmap = 0;
|
||||||
GLXFBConfig *fbconfig;
|
GLXFBConfig *fbconfig;
|
||||||
Display *dpy;
|
Display *dpy;
|
||||||
guint depth;
|
guint depth;
|
||||||
Pixmap pixmap;
|
Pixmap pixmap;
|
||||||
guint pixmap_width, pixmap_height;
|
guint pixmap_width, pixmap_height;
|
||||||
ClutterBackendGLX *backend_glx;
|
ClutterBackendGLX *backend_glx;
|
||||||
|
ClutterTextureQuality quality;
|
||||||
|
|
||||||
CLUTTER_NOTE (TEXTURE, "Creating GLXPixmap");
|
CLUTTER_NOTE (TEXTURE, "Creating GLXPixmap");
|
||||||
|
|
||||||
@ -476,8 +477,13 @@ clutter_glx_texture_pixmap_create_glx_pixmap (ClutterGLXTexturePixmap *texture)
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
quality = clutter_texture_get_filter_quality (CLUTTER_TEXTURE(texture));
|
||||||
|
|
||||||
|
if (quality == CLUTTER_TEXTURE_QUALITY_HIGH)
|
||||||
|
mipmap = 1;
|
||||||
|
|
||||||
attribs[i++] = GLX_MIPMAP_TEXTURE_EXT;
|
attribs[i++] = GLX_MIPMAP_TEXTURE_EXT;
|
||||||
attribs[i++] = 0;
|
attribs[i++] = mipmap;
|
||||||
|
|
||||||
attribs[i++] = GLX_TEXTURE_TARGET_EXT;
|
attribs[i++] = GLX_TEXTURE_TARGET_EXT;
|
||||||
|
|
||||||
@ -647,7 +653,7 @@ clutter_glx_texture_pixmap_using_extension (ClutterGLXTexturePixmap *texture)
|
|||||||
|
|
||||||
priv = CLUTTER_GLX_TEXTURE_PIXMAP (texture)->priv;
|
priv = CLUTTER_GLX_TEXTURE_PIXMAP (texture)->priv;
|
||||||
|
|
||||||
return (priv->use_fallback != FALSE);
|
return (_have_tex_from_pixmap_ext);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user