mirror of
https://github.com/brl/mutter.git
synced 2024-11-22 16:10:41 -05:00
Initicalize stage perspective matrix for defaults
This commit is contained in:
parent
e1a8434d64
commit
4d0cfed2dc
@ -1,3 +1,10 @@
|
|||||||
|
2007-06-01 Tomas Frydrych <tf@openedhand.com>
|
||||||
|
|
||||||
|
* clutter/clutter-stage.c:
|
||||||
|
(clutter_stage_init):
|
||||||
|
Call _clutter_stage_refresh_perspective_matrix to initialize the
|
||||||
|
matrix for default values.
|
||||||
|
|
||||||
2007-06-01 Tomas Frydrych <tf@openedhand.com>
|
2007-06-01 Tomas Frydrych <tf@openedhand.com>
|
||||||
|
|
||||||
* clutter/clutter-fixed.h:
|
* clutter/clutter-fixed.h:
|
||||||
|
@ -384,6 +384,43 @@ clutter_stage_class_init (ClutterStageClass *klass)
|
|||||||
g_type_class_add_private (gobject_class, sizeof (ClutterStagePrivate));
|
g_type_class_add_private (gobject_class, sizeof (ClutterStagePrivate));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_clutter_stage_refresh_perspective_matrix (ClutterStagePrivate * priv)
|
||||||
|
{
|
||||||
|
ClutterFixed xmax, ymax;
|
||||||
|
ClutterFixed x, y, c, d;
|
||||||
|
|
||||||
|
memset (&priv->perspective_mtx[0], 0, sizeof (priv->perspective_mtx));
|
||||||
|
|
||||||
|
ymax = clutter_qmulx (priv->perspective.z_near,
|
||||||
|
clutter_tani (priv->perspective.fovy >> 1));
|
||||||
|
|
||||||
|
xmax = clutter_qmulx (ymax, priv->perspective.aspect);
|
||||||
|
|
||||||
|
x = CFX_DIV (priv->perspective.z_near, xmax);
|
||||||
|
y = CFX_DIV (priv->perspective.z_near, ymax);
|
||||||
|
c = CFX_DIV (-(priv->perspective.z_far + priv->perspective.z_near),
|
||||||
|
( priv->perspective.z_far - priv->perspective.z_near));
|
||||||
|
|
||||||
|
d = CFX_DIV (-(clutter_qmulx (2 * priv->perspective.z_far,
|
||||||
|
priv->perspective.z_near)),
|
||||||
|
(priv->perspective.z_far - priv->perspective.z_near));
|
||||||
|
|
||||||
|
#define M(row,col) priv->perspective_mtx[col*4+row]
|
||||||
|
M(0,0) = x;
|
||||||
|
M(1,1) = y;
|
||||||
|
M(2,2) = c;
|
||||||
|
M(2,3) = d;
|
||||||
|
M(3,2) = -CFX_ONE;
|
||||||
|
#undef M
|
||||||
|
}
|
||||||
|
|
||||||
|
const ClutterFixed *
|
||||||
|
_clutter_stage_get_perspective_matrix (ClutterStage * stage)
|
||||||
|
{
|
||||||
|
return &stage->priv->perspective_mtx[0];
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
clutter_stage_init (ClutterStage *self)
|
clutter_stage_init (ClutterStage *self)
|
||||||
{
|
{
|
||||||
@ -407,6 +444,8 @@ clutter_stage_init (ClutterStage *self)
|
|||||||
priv->perspective.aspect = CFX_ONE;
|
priv->perspective.aspect = CFX_ONE;
|
||||||
priv->perspective.z_near = CLUTTER_FLOAT_TO_FIXED (0.1);
|
priv->perspective.z_near = CLUTTER_FLOAT_TO_FIXED (0.1);
|
||||||
priv->perspective.z_far = CLUTTER_FLOAT_TO_FIXED (100.0);
|
priv->perspective.z_far = CLUTTER_FLOAT_TO_FIXED (100.0);
|
||||||
|
|
||||||
|
_clutter_stage_refresh_perspective_matrix (priv);
|
||||||
|
|
||||||
clutter_actor_set_size (CLUTTER_ACTOR (self), 640, 480);
|
clutter_actor_set_size (CLUTTER_ACTOR (self), 640, 480);
|
||||||
}
|
}
|
||||||
@ -486,43 +525,6 @@ clutter_stage_get_color (ClutterStage *stage,
|
|||||||
color->alpha = priv->color.alpha;
|
color->alpha = priv->color.alpha;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
_clutter_stage_refresh_perspective_matrix (ClutterStagePrivate * priv)
|
|
||||||
{
|
|
||||||
ClutterFixed xmax, ymax;
|
|
||||||
ClutterFixed x, y, c, d;
|
|
||||||
|
|
||||||
memset (&priv->perspective_mtx[0], 0, sizeof (priv->perspective_mtx));
|
|
||||||
|
|
||||||
ymax = clutter_qmulx (priv->perspective.z_near,
|
|
||||||
clutter_tani (priv->perspective.fovy >> 1));
|
|
||||||
|
|
||||||
xmax = clutter_qmulx (ymax, priv->perspective.aspect);
|
|
||||||
|
|
||||||
x = CFX_DIV (priv->perspective.z_near, xmax);
|
|
||||||
y = CFX_DIV (priv->perspective.z_near, ymax);
|
|
||||||
c = CFX_DIV (-(priv->perspective.z_far + priv->perspective.z_near),
|
|
||||||
( priv->perspective.z_far - priv->perspective.z_near));
|
|
||||||
|
|
||||||
d = CFX_DIV (-(clutter_qmulx (2 * priv->perspective.z_far,
|
|
||||||
priv->perspective.z_near)),
|
|
||||||
(priv->perspective.z_far - priv->perspective.z_near));
|
|
||||||
|
|
||||||
#define M(row,col) priv->perspective_mtx[col*4+row]
|
|
||||||
M(0,0) = x;
|
|
||||||
M(1,1) = y;
|
|
||||||
M(2,2) = c;
|
|
||||||
M(2,3) = d;
|
|
||||||
M(3,2) = -CFX_ONE;
|
|
||||||
#undef M
|
|
||||||
}
|
|
||||||
|
|
||||||
const ClutterFixed *
|
|
||||||
_clutter_stage_get_perspective_matrix (ClutterStage * stage)
|
|
||||||
{
|
|
||||||
return &stage->priv->perspective_mtx[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* clutter_stage_set_perspectivex
|
* clutter_stage_set_perspectivex
|
||||||
* @stage: A #ClutterStage
|
* @stage: A #ClutterStage
|
||||||
|
Loading…
Reference in New Issue
Block a user