[maemo-commits] [maemo-commits] r17832 - in projects/haf/trunk/clutter0.8: clutter/cogl/common clutter/eglx debian
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Fri Mar 27 13:22:00 EET 2009
- Previous message: [maemo-commits] r17831 - in projects/haf/trunk/glib: . glib
- Next message: [maemo-commits] r17833 - projects/haf/trunk/hildon-welcome/src
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: gw
Date: 2009-03-27 13:21:58 +0200 (Fri, 27 Mar 2009)
New Revision: 17832
Modified:
projects/haf/trunk/clutter0.8/clutter/cogl/common/pvr-texture.c
projects/haf/trunk/clutter0.8/clutter/eglx/clutter-eglx-texture-pixmap.c
projects/haf/trunk/clutter0.8/debian/changelog
Log:
* clutter/cogl/common/pvr-texture.c: fix some texture encoding artefacts
* clutter/eglx/clutter-eglx-texture-pixmap.c: Now only use alphs channel
if depth is reported as 32 bit, because depth != pixel bpp.
Modified: projects/haf/trunk/clutter0.8/clutter/cogl/common/pvr-texture.c
===================================================================
--- projects/haf/trunk/clutter0.8/clutter/cogl/common/pvr-texture.c 2009-03-27 10:21:33 UTC (rev 17831)
+++ projects/haf/trunk/clutter0.8/clutter/cogl/common/pvr-texture.c 2009-03-27 11:21:58 UTC (rev 17832)
@@ -1,4 +1,6 @@
/*
+ * This file is part of libhildondesktop
+ *
* Copyright (C) 2008 Nokia Corporation.
*
* Authored By Gordon Williams <gordon.williams at collabora.co.uk>
@@ -347,6 +349,34 @@
}
}
+inline static void nearest_pvr_color( Color *col, gboolean use_max ) {
+ if (col->alpha >= 224)
+ {
+ if (use_max) {
+ col->red = MIN(col->red + 7, 255);
+ col->green = MIN(col->green + 7, 255);
+ col->blue = MIN(col->blue + 7, 255);
+ }
+ col->alpha = 0xFF;
+ col->red = (col->red & 0xF8) | (col->red >> 5);
+ col->green = (col->green & 0xF8) | (col->green >> 5);
+ col->blue = (col->blue & 0xF8) | (col->blue >> 5);
+ }
+ else
+ {
+ if (use_max) {
+ col->alpha = MIN(col->alpha + 31, 255);
+ col->red = MIN(col->red + 15, 255);
+ col->green = MIN(col->green + 15, 255);
+ col->blue = MIN(col->blue + 15, 255);
+ }
+ col->alpha = (col->alpha & 0xE0) | (col->alpha >> 3);
+ col->red = (col->red & 0xF0) | (col->red >> 4);
+ col->green = (col->green & 0xF0) | (col->green >> 4);
+ col->blue = (col->blue & 0xF0) | (col->blue >> 4);
+ }
+}
+
inline static Color pvr_color_to_color( guint32 col )
{
Color result;
@@ -490,6 +520,8 @@
SETMIN(clow, blockline[3]);
SETMAX(chigh, blockline[3]);
}
+ nearest_pvr_color(&clow, FALSE);
+ nearest_pvr_color(&chigh, TRUE);
col_low[1+x+block_offs] = clow;
col_high[1+x+block_offs] = chigh;
}
Modified: projects/haf/trunk/clutter0.8/clutter/eglx/clutter-eglx-texture-pixmap.c
===================================================================
--- projects/haf/trunk/clutter0.8/clutter/eglx/clutter-eglx-texture-pixmap.c 2009-03-27 10:21:33 UTC (rev 17831)
+++ projects/haf/trunk/clutter0.8/clutter/eglx/clutter-eglx-texture-pixmap.c 2009-03-27 11:21:58 UTC (rev 17832)
@@ -93,11 +93,6 @@
void
clutter_eglx_texture_pixmap_paint (ClutterActor *actor);
-static EGLConfig
-clutter_eglx_get_eglconfig (EGLDisplay *display, int for_pixmap,
- EGLSurface *surface,
- EGLNativePixmapType p_or_w);
-
static void
clutter_eglx_texture_pixmap_update_area (ClutterX11TexturePixmap *texture,
gint x,
@@ -105,6 +100,10 @@
gint width,
gint height);
+static EGLConfig
+clutter_eglx_get_eglconfig (EGLDisplay *display,
+ EGLSurface *surface, Pixmap pixmap,
+ int depth);
static void
clutter_eglx_texture_pixmap_surface_create (ClutterActor *actor);
@@ -288,9 +287,8 @@
if (pixmap)
{
EGLConfig conf = clutter_eglx_get_eglconfig (
- backend->edpy, 1,
- &priv->egl_surface,
- (EGLNativePixmapType)pixmap);
+ backend->edpy, &priv->egl_surface,
+ pixmap, pixmap_depth);
print_config_info (conf);
}
else
@@ -307,9 +305,8 @@
return;
}
conf = clutter_eglx_get_eglconfig (
- backend->edpy, 0,
- &priv->egl_surface,
- (EGLNativePixmapType)pixmap);
+ backend->edpy, &priv->egl_surface,
+ pixmap, pixmap_depth);
print_config_info (conf);
}
@@ -423,15 +420,15 @@
* will free it anyway if we unrealise or set a new texture */
}
-static const EGLint pixmap_creation_config[] = {
+static const EGLint pixmap_creation_config_rgb[] = {
EGL_TEXTURE_TARGET, EGL_TEXTURE_2D,
EGL_TEXTURE_FORMAT, EGL_TEXTURE_RGB,
EGL_NONE
};
-static const EGLint window_creation_config[] = {
+static const EGLint pixmap_creation_config_rgba[] = {
EGL_TEXTURE_TARGET, EGL_TEXTURE_2D,
- EGL_TEXTURE_FORMAT, EGL_TEXTURE_RGB,
+ EGL_TEXTURE_FORMAT, EGL_TEXTURE_RGBA,
EGL_NONE
};
@@ -444,39 +441,19 @@
EGL_NONE
};
-static const EGLint window_config[] = {
- EGL_SURFACE_TYPE, EGL_PIXMAP_BIT,
- EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
- EGL_DEPTH_SIZE, 0,
- EGL_BIND_TO_TEXTURE_RGB, EGL_TRUE,
- EGL_NONE
-};
-
-
static EGLConfig
-clutter_eglx_get_eglconfig (EGLDisplay *display, int for_pixmap,
- EGLSurface *surface, EGLNativePixmapType p_or_w)
+clutter_eglx_get_eglconfig (EGLDisplay *display,
+ EGLSurface *surface, Pixmap pixmap,
+ int depth)
{
EGLConfig configs[20];
- EGLint creation_config[
- MAX(sizeof(pixmap_creation_config),
- sizeof(window_creation_config))];
int i, nconfigs = 0;
EGLBoolean ret;
+ gboolean has_alpha = depth==32;
- if (for_pixmap)
- {
- ret = eglChooseConfig (display, pixmap_config, configs,
- G_N_ELEMENTS (configs), &nconfigs);
- memcpy(creation_config, pixmap_creation_config, sizeof(pixmap_creation_config));
- }
- else
- {
- ret = eglChooseConfig (display, window_config, configs,
- G_N_ELEMENTS (configs), &nconfigs);
- memcpy(creation_config, window_creation_config, sizeof(window_creation_config));
- }
+ ret = eglChooseConfig (display, pixmap_config, configs,
+ G_N_ELEMENTS (configs), &nconfigs);
if (ret != EGL_TRUE)
{
@@ -490,33 +467,19 @@
for (i = 0; i < nconfigs; ++i)
{
- int j;
- /* we don't seem to be able to find out if we have an alpha channel or
- * not from the pixmap (depth may be 32, but no alpha) - so we'll
- * just try once with alpha, and if it fails we try without */
+ if (has_alpha)
+ *surface = eglCreatePixmapSurface (display, configs[i],
+ (EGLNativePixmapType)pixmap,
+ pixmap_creation_config_rgba);
+ else
+ *surface = eglCreatePixmapSurface (display, configs[i],
+ (EGLNativePixmapType)pixmap,
+ pixmap_creation_config_rgb);
- /* set up texture for alpha and try to create a surface... */
- for (j=0; creation_config[j]!=EGL_NONE; j+=2)
- if (creation_config[j] == EGL_TEXTURE_FORMAT)
- creation_config[j+1] = EGL_TEXTURE_RGBA;
-
- *surface = eglCreatePixmapSurface (display, configs[i],
- p_or_w, creation_config);
-
- if (*surface == EGL_NO_SURFACE)
- {
- /* set up texture for no alpha and try... */
- for (j=0; creation_config[j]!=EGL_NONE; j+=2)
- if (creation_config[j] == EGL_TEXTURE_FORMAT)
- creation_config[j+1] = EGL_TEXTURE_RGB;
- *surface = eglCreatePixmapSurface (display, configs[i],
- p_or_w, creation_config);
- }
-
if (*surface != EGL_NO_SURFACE)
break;
- g_debug ("%s: eglCreate(Pixmap|Window)Surface failed for config:",
+ g_debug ("%s: eglCreatePixmapSurface failed for config:",
__FUNCTION__);
print_config_info (configs[i]);
}
Modified: projects/haf/trunk/clutter0.8/debian/changelog
===================================================================
--- projects/haf/trunk/clutter0.8/debian/changelog 2009-03-27 10:21:33 UTC (rev 17831)
+++ projects/haf/trunk/clutter0.8/debian/changelog 2009-03-27 11:21:58 UTC (rev 17832)
@@ -1,6 +1,8 @@
clutter (0.8.2-0maemo25~unreleased) unstable; urgency=low
- * writeme
+ * clutter/cogl/common/pvr-texture.c: fix some texture encoding artefacts
+ * clutter/eglx/clutter-eglx-texture-pixmap.c: Now only use alphs channel
+ if depth is reported as 32 bit, because depth != pixel bpp.
-- Gordon Williams <gordon.williams at collabora.co.uk> Fri, 27 Mar 2009 09:44:29 +0200
- Previous message: [maemo-commits] r17831 - in projects/haf/trunk/glib: . glib
- Next message: [maemo-commits] r17833 - projects/haf/trunk/hildon-welcome/src
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
