mirror of
https://github.com/brl/mutter.git
synced 2025-02-16 21:34:09 +00:00
2007-05-02 Matthew Allum <mallum@openedhand.com>
* clutter/clutter-actor.c: * clutter/cogl/gles/cogl.c: Fix rotation + other fixed point cleanups. * clutter/clutter-texture.h: Sketch out an updated API.
This commit is contained in:
parent
d18e432b22
commit
9d709e3e67
102
gles/cogl.c
102
gles/cogl.c
@ -37,7 +37,7 @@
|
|||||||
|
|
||||||
static gulong __enable_flags = 0;
|
static gulong __enable_flags = 0;
|
||||||
|
|
||||||
#define COGL_DEBUG 1
|
#define COGL_DEBUG 0
|
||||||
|
|
||||||
#if COGL_DEBUG
|
#if COGL_DEBUG
|
||||||
struct token_string
|
struct token_string
|
||||||
@ -250,6 +250,7 @@ cogl_texture_can_size (COGLenum pixel_format,
|
|||||||
{
|
{
|
||||||
GLint new_width = 0;
|
GLint new_width = 0;
|
||||||
|
|
||||||
|
|
||||||
/* FIXME */
|
/* FIXME */
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
@ -478,52 +479,6 @@ cogl_perspective (ClutterAngle fovy,
|
|||||||
#undef M
|
#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
|
void
|
||||||
cogl_setup_viewport (guint w,
|
cogl_setup_viewport (guint w,
|
||||||
guint h,
|
guint h,
|
||||||
@ -536,18 +491,11 @@ cogl_setup_viewport (guint w,
|
|||||||
gint height = (gint) h;
|
gint height = (gint) h;
|
||||||
|
|
||||||
GE( glViewport (0, 0, width, height) );
|
GE( glViewport (0, 0, width, height) );
|
||||||
|
|
||||||
#define NEG(x) (1 + ~(x))
|
|
||||||
|
|
||||||
GE( glMatrixMode (GL_PROJECTION) );
|
GE( glMatrixMode (GL_PROJECTION) );
|
||||||
GE( glLoadIdentity () );
|
GE( glLoadIdentity () );
|
||||||
|
|
||||||
/*
|
/* For Ortho projection.
|
||||||
glOrthox (0,
|
* glOrthox (0, width << 16, 0, height << 16, -1 << 16, 1 << 16);
|
||||||
width << 16,
|
|
||||||
0,
|
|
||||||
height << 16,
|
|
||||||
-1 << 16, 1 << 16);
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
cogl_perspective (fovy, aspect, z_near, z_far);
|
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) */
|
/* camera distance from screen, 0.5 * tan (FOV) */
|
||||||
#define DEFAULT_Z_CAMERA 0.866025404f
|
#define DEFAULT_Z_CAMERA 0.866025404f
|
||||||
|
|
||||||
|
|
||||||
GE( glTranslatex (-1 << 15,
|
GE( glTranslatex (-1 << 15,
|
||||||
-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,
|
GE( glScalex ( CFX_ONE / width,
|
||||||
NEG(CFX_ONE) / height,
|
-CFX_ONE / height,
|
||||||
CFX_ONE / width));
|
CFX_ONE / width));
|
||||||
|
|
||||||
g_debug ("SX: %f/%f %f/%f, w %d, h %d",
|
GE( glTranslatex (0, -CFX_ONE * height, 0) );
|
||||||
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
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user