From 2845bb5b74cdcd7ceff42142d58e59e410cfbaa5 Mon Sep 17 00:00:00 2001 From: Matthew Allum Date: Wed, 2 May 2007 09:01:11 +0000 Subject: [PATCH] 2007-05-02 Matthew Allum * clutter/clutter-actor.c: * clutter/cogl/gles/cogl.c: Fix rotation + other fixed point cleanups. * clutter/clutter-texture.h: Sketch out an updated API. --- ChangeLog | 9 ++++ clutter/clutter-actor.c | 34 ++++--------- clutter/clutter-texture.h | 39 ++++++++++++--- clutter/cogl/gles/cogl.c | 102 +++----------------------------------- 4 files changed, 58 insertions(+), 126 deletions(-) diff --git a/ChangeLog b/ChangeLog index 453993260..21e1c2ca7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2007-05-02 Matthew Allum + + * clutter/clutter-actor.c: + * clutter/cogl/gles/cogl.c: + Fix rotation + other fixed point cleanups. + + * clutter/clutter-texture.h: + Sketch out an updated API. + 2007-05-01 Matthew Allum * clutter/clutter-rectangle.c: diff --git a/clutter/clutter-actor.c b/clutter/clutter-actor.c index b627ae4ef..c5e0653e5 100644 --- a/clutter/clutter-actor.c +++ b/clutter/clutter-actor.c @@ -299,6 +299,8 @@ clutter_actor_paint (ClutterActor *self) cogl_push_matrix(); +#define NEG(x) (1 + ~(x)) + #if CLUTTER_COGL_GL glLoadName (clutter_actor_get_id (self)); #endif @@ -312,45 +314,27 @@ clutter_actor_paint (ClutterActor *self) if (self->priv->rzang) { - cogl_translatex (priv->rzx, - priv->rzy, - 0); - + cogl_translate (priv->rzx, priv->rzy, 0); cogl_rotatex (priv->rzang, 0, 0, CFX_ONE); - - cogl_translatex (-1. * priv->rzx, - -1. * priv->rzy, - 0); + cogl_translate (-priv->rzx, -priv->rzy, 0); } if (self->priv->ryang) { - cogl_translatex (priv->ryx, - 0, - CLUTTER_INT_TO_FIXED (priv->z) + priv->ryz); - + cogl_translate (priv->ryx, 0, priv->z + priv->ryz); cogl_rotatex (priv->ryang, 0, CFX_ONE, 0); - - cogl_translatex (- priv->ryx, - 0.0, - CLUTTER_INT_TO_FIXED(-priv->z) - priv->ryz); + cogl_translate (-priv->ryx, 0, -(priv->z + priv->ryz)); } if (self->priv->rxang) { - cogl_translatex (0, - priv->rxy, - CLUTTER_INT_TO_FIXED(priv->z) + priv->rxz); - + cogl_translate (0, priv->rxy, priv->z + priv->rxz); cogl_rotatex (priv->rxang, CFX_ONE, 0, CFX_ONE); - - cogl_translatex (0, - - priv->rxy, - CLUTTER_INT_TO_FIXED(-priv->z) - priv->rxz); + cogl_translate (0, -priv->rxy, -(priv->z - priv->rxz)); } if (self->priv->z) - glTranslatef (0.0, 0.0, (float) priv->z); + cogl_translate (0, 0, priv->z); if (self->priv->scale_x != CFX_ONE || self->priv->scale_y != CFX_ONE) diff --git a/clutter/clutter-texture.h b/clutter/clutter-texture.h index b6d5f7a9a..428ed30f9 100644 --- a/clutter/clutter-texture.h +++ b/clutter/clutter-texture.h @@ -31,12 +31,39 @@ G_BEGIN_DECLS -#define CLUTTER_TEXTURE_FORMAT_RGB 1 -#define CLUTTER_TEXTURE_FORMAT_RGBA 2 -#define CLUTTER_TEXTURE_FORMAT_BGR 3 -#define CLUTTER_TEXTURE_FORMAT_BGRA 4 -#define CLUTTER_TEXTURE_FORMAT_YUV 5 -#define CLUTTER_TEXTURE_FORMAT_YUV2 6 +#if 0 + +/* New API Ideas */ + +#define CLUTTER_TEXTURE_RGB_FLAG_BRGA (1<<1) +#define CLUTTER_TEXTURE_RGB_FLAG_PREMULT (1<<2) + +gboolean +clutter_texture_set_from_rgb_data (ClutterTexture *texture, + const guchar *data, + gboolean has_alpha, + gint width, + gint height, + gint rowstride, + gint bpp, + gint flags, + GError *error); + +gboolean +clutter_texture_set_from_yuv_data (ClutterTexture *texture, + const guchar *data, + gint width, + gint height, + gint flags, + GError *error); + +Notes +===== + + - drop format and type props - would be set in GL texture automagically + via about calls. + +#endif #define CLUTTER_TYPE_TEXTURE (clutter_texture_get_type ()) #define CLUTTER_TEXTURE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_TEXTURE, ClutterTexture)) diff --git a/clutter/cogl/gles/cogl.c b/clutter/cogl/gles/cogl.c index 79172f01b..67483c3f5 100644 --- a/clutter/cogl/gles/cogl.c +++ b/clutter/cogl/gles/cogl.c @@ -37,7 +37,7 @@ static gulong __enable_flags = 0; -#define COGL_DEBUG 1 +#define COGL_DEBUG 0 #if COGL_DEBUG struct token_string @@ -250,6 +250,7 @@ cogl_texture_can_size (COGLenum pixel_format, { GLint new_width = 0; + /* FIXME */ return TRUE; @@ -478,52 +479,6 @@ cogl_perspective (ClutterAngle fovy, #undef M } - - -#if 0 -void -cogl_perspective (ClutterAngle fovy, - ClutterFixed aspect, - ClutterFixed zNear, - ClutterFixed zFar) -{ - ClutterFixed xmax, ymax; - ClutterFixed x, y, c, d; - - GLfloat m[16]; - - memset (&m[0], 0, sizeof (m)); - - /* - * Based on the original algorithm in perspective(): - * - * 1) xmin = -xmax => xmax + xmin == 0 && xmax - xmin == 2 * xmax - * same true for y, hence: a == 0 && b == 0; - * - * 2) When working with small numbers, we can are loosing significant - * precision, hence we use clutter_qmulx() here, not the fast macro. - */ - ymax = clutter_qmulx (zNear, clutter_tani (fovy >> 1)); - xmax = clutter_qmulx (ymax, aspect); - - x = CFX_DIV (zNear, xmax); - y = CFX_DIV (zNear, ymax); - c = CFX_DIV (-(zFar + zNear), ( zFar - zNear)); - d = CFX_DIV (-(clutter_qmulx (2*zFar, zNear)), (zFar - zNear)); - -#define M(row,col) m[col*4+row] - M(0,0) = CLUTTER_FIXED_TO_FLOAT (x); - M(1,1) = CLUTTER_FIXED_TO_FLOAT (y); - M(2,2) = CLUTTER_FIXED_TO_FLOAT (c); - M(2,3) = CLUTTER_FIXED_TO_FLOAT (d); - M(3,2) = -1.0F; - - GE( glMultMatrixf (m) ); - -#undef M -} -#endif - void cogl_setup_viewport (guint w, guint h, @@ -536,18 +491,11 @@ cogl_setup_viewport (guint w, gint height = (gint) h; GE( glViewport (0, 0, width, height) ); - -#define NEG(x) (1 + ~(x)) - GE( glMatrixMode (GL_PROJECTION) ); GE( glLoadIdentity () ); - /* - glOrthox (0, - width << 16, - 0, - height << 16, - -1 << 16, 1 << 16); + /* For Ortho projection. + * glOrthox (0, width << 16, 0, height << 16, -1 << 16, 1 << 16); */ cogl_perspective (fovy, aspect, z_near, z_far); @@ -558,50 +506,14 @@ cogl_setup_viewport (guint w, /* camera distance from screen, 0.5 * tan (FOV) */ #define DEFAULT_Z_CAMERA 0.866025404f - GE( glTranslatex (-1 << 15, -1 << 15, - NEG(CLUTTER_FLOAT_TO_FIXED(DEFAULT_Z_CAMERA))) ); + -CLUTTER_FLOAT_TO_FIXED(DEFAULT_Z_CAMERA)) ); - g_debug ("TX1: %f/%f %f/%f %f/%f", - CLUTTER_FIXED_TO_DOUBLE (-1 << 15), -0.5, - CLUTTER_FIXED_TO_DOUBLE (-1 << 15), -0.5, - CLUTTER_FIXED_TO_DOUBLE (NEG(CLUTTER_FLOAT_TO_FIXED(DEFAULT_Z_CAMERA))), - -DEFAULT_Z_CAMERA); - GE( glScalex ( CFX_ONE / width, - NEG(CFX_ONE) / height, + -CFX_ONE / height, CFX_ONE / width)); - g_debug ("SX: %f/%f %f/%f, w %d, h %d", - CLUTTER_FIXED_TO_DOUBLE (CFX_ONE / width), 1.0f / width, - CLUTTER_FIXED_TO_DOUBLE (NEG(CFX_ONE) / height), -1.0f / height, - width, height); - - GE( glTranslatex (0, NEG(CFX_ONE) * height, 0) ); - - g_debug ("TX2: %f/%f", - CLUTTER_FIXED_TO_DOUBLE (NEG(CFX_ONE) * height), - -1.0 * height); - -#if 0 - GE( glTranslatex (NEG(CFX_HALF), - NEG(CFX_HALF), - NEG(CLUTTER_FLOAT_TO_FIXED(DEFAULT_Z_CAMERA))) ); - - GE( glScalex ( CFX_DIV(CFX_ONE, CLUTTER_INT_TO_FIXED(width)), - NEG(CFX_DIV(CFX_ONE, CLUTTER_INT_TO_FIXED(height))), - CFX_DIV(CFX_ONE, CLUTTER_INT_TO_FIXED(width))) ); - - GE( glTranslatex (0, NEG(CFX_MUL(CFX_ONE, CLUTTER_INT_TO_FIXED(height))), 0) ); -#endif - -#if 0 - GE( glTranslatef (-0.5f, -0.5f, -DEFAULT_Z_CAMERA) ); - GE( glScalef ( 1.0f / width, - -1.0f / height, - 1.0f / width) ); - GE( glTranslatef (0.0f, -1.0 * height, 0.0f) ); -#endif + GE( glTranslatex (0, -CFX_ONE * height, 0) ); }