more of projection work
This commit is contained in:
parent
5f4a7a4812
commit
14e00cb904
17
ChangeLog
17
ChangeLog
@ -1,3 +1,20 @@
|
|||||||
|
2007-06-13 Tomas Frydrych <tf@openedhand.com>
|
||||||
|
|
||||||
|
* clutter/clutter-actor.c:
|
||||||
|
(clutter_actor_project_vertices):
|
||||||
|
(clutter_actor_project_proint):
|
||||||
|
Fixed translation of Y coords to match the windowing system.
|
||||||
|
|
||||||
|
* clutter/egl/clutter-stage-egl.c:
|
||||||
|
* clutter/glx/clutter-stage-glx.c:
|
||||||
|
* clutter/sdl/clutter-stage-sdl.c:
|
||||||
|
(clutter_stage_*_request_size):
|
||||||
|
Initialize viewport when setting/resetting stage side.
|
||||||
|
|
||||||
|
* tests/Makefile.am
|
||||||
|
* tests/test-project.c:
|
||||||
|
An interactive test of the projection stuff.
|
||||||
|
|
||||||
2007-06-12 Tomas Frydrych <tf@openedhand.com>
|
2007-06-12 Tomas Frydrych <tf@openedhand.com>
|
||||||
|
|
||||||
* clutter/clutter-main.c:
|
* clutter/clutter-main.c:
|
||||||
|
@ -370,6 +370,10 @@ clutter_actor_transform_point (ClutterActor *actor,
|
|||||||
((CFX_DIV (x,w) + CFX_ONE) >> 1), v1) \
|
((CFX_DIV (x,w) + CFX_ONE) >> 1), v1) \
|
||||||
+ v2)
|
+ v2)
|
||||||
|
|
||||||
|
#define MTX_GL_SCALE_Y(y,w,v1,v2) (v1 - CFX_MUL( \
|
||||||
|
((CFX_DIV (y,w) + CFX_ONE) >> 1), v1) \
|
||||||
|
+ v2)
|
||||||
|
|
||||||
#define MTX_GL_SCALE_Z(z,w) ((CFX_DIV (z,w) + CFX_ONE) >> 1)
|
#define MTX_GL_SCALE_Z(z,w) ((CFX_DIV (z,w) + CFX_ONE) >> 1)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -404,8 +408,8 @@ clutter_actor_project_point (ClutterActor *self,
|
|||||||
mtx_transform (mtx_p, x, y, z, &w);
|
mtx_transform (mtx_p, x, y, z, &w);
|
||||||
|
|
||||||
*x = MTX_GL_SCALE(*x,w,v[2],v[0]);
|
*x = MTX_GL_SCALE(*x,w,v[2],v[0]);
|
||||||
*y = MTX_GL_SCALE(*y,w,v[3],v[1]);
|
*y = MTX_GL_SCALE_Y(*y,w,v[3],v[1]);
|
||||||
*z = MTX_GL_SCALE_Z(*z,w);
|
*z = MTX_GL_SCALE(*z,w,v[2],v[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Recursively tranform supplied vertices with the tranform for the current
|
/* Recursively tranform supplied vertices with the tranform for the current
|
||||||
@ -570,8 +574,8 @@ clutter_actor_project_vertices (ClutterActor * self,
|
|||||||
&w[0]);
|
&w[0]);
|
||||||
|
|
||||||
verts[0].x = MTX_GL_SCALE (verts[0].x, w[0], v[2], v[0]);
|
verts[0].x = MTX_GL_SCALE (verts[0].x, w[0], v[2], v[0]);
|
||||||
verts[0].y = MTX_GL_SCALE (verts[0].y, w[0], v[3], v[1]);
|
verts[0].y = MTX_GL_SCALE_Y (verts[0].y, w[0], v[3], v[1]);
|
||||||
verts[0].z = MTX_GL_SCALE_Z (verts[0].z, w[0]);
|
verts[0].z = MTX_GL_SCALE (verts[0].z, w[0], v[2], v[0]);
|
||||||
|
|
||||||
mtx_transform (mtx_p,
|
mtx_transform (mtx_p,
|
||||||
&verts[1].x,
|
&verts[1].x,
|
||||||
@ -580,8 +584,8 @@ clutter_actor_project_vertices (ClutterActor * self,
|
|||||||
&w[1]);
|
&w[1]);
|
||||||
|
|
||||||
verts[1].x = MTX_GL_SCALE (verts[1].x, w[1], v[2], v[0]);
|
verts[1].x = MTX_GL_SCALE (verts[1].x, w[1], v[2], v[0]);
|
||||||
verts[1].y = MTX_GL_SCALE (verts[1].y, w[1], v[3], v[1]);
|
verts[1].y = MTX_GL_SCALE_Y (verts[1].y, w[1], v[3], v[1]);
|
||||||
verts[1].z = MTX_GL_SCALE_Z (verts[1].z, w[1]);
|
verts[1].z = MTX_GL_SCALE (verts[1].z, w[1], v[2], v[0]);
|
||||||
|
|
||||||
mtx_transform (mtx_p,
|
mtx_transform (mtx_p,
|
||||||
&verts[2].x,
|
&verts[2].x,
|
||||||
@ -590,8 +594,8 @@ clutter_actor_project_vertices (ClutterActor * self,
|
|||||||
&w[2]);
|
&w[2]);
|
||||||
|
|
||||||
verts[2].x = MTX_GL_SCALE (verts[2].x, w[2], v[2], v[0]);
|
verts[2].x = MTX_GL_SCALE (verts[2].x, w[2], v[2], v[0]);
|
||||||
verts[2].y = MTX_GL_SCALE (verts[2].y, w[2], v[3], v[1]);
|
verts[2].y = MTX_GL_SCALE_Y (verts[2].y, w[2], v[3], v[1]);
|
||||||
verts[2].z = MTX_GL_SCALE_Z (verts[2].z, w[2]);
|
verts[2].z = MTX_GL_SCALE (verts[2].z, w[2], v[2], v[0]);
|
||||||
|
|
||||||
mtx_transform (mtx_p,
|
mtx_transform (mtx_p,
|
||||||
&verts[3].x,
|
&verts[3].x,
|
||||||
@ -600,8 +604,8 @@ clutter_actor_project_vertices (ClutterActor * self,
|
|||||||
&w[3]);
|
&w[3]);
|
||||||
|
|
||||||
verts[3].x = MTX_GL_SCALE (verts[3].x, w[3], v[2], v[0]);
|
verts[3].x = MTX_GL_SCALE (verts[3].x, w[3], v[2], v[0]);
|
||||||
verts[3].y = MTX_GL_SCALE (verts[3].y, w[3], v[3], v[1]);
|
verts[3].y = MTX_GL_SCALE_Y (verts[3].y, w[3], v[3], v[1]);
|
||||||
verts[3].z = MTX_GL_SCALE_Z (verts[3].z, w[3]);
|
verts[3].z = MTX_GL_SCALE (verts[3].z, w[3], v[2], v[0]);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
g_debug ("Projection Matrix:\n"
|
g_debug ("Projection Matrix:\n"
|
||||||
|
@ -89,6 +89,7 @@ clutter_stage_egl_realize (ClutterActor *actor)
|
|||||||
EGLConfig configs[2];
|
EGLConfig configs[2];
|
||||||
EGLint config_count;
|
EGLint config_count;
|
||||||
EGLBoolean status;
|
EGLBoolean status;
|
||||||
|
ClutterPerspective perspective;
|
||||||
|
|
||||||
gboolean is_offscreen;
|
gboolean is_offscreen;
|
||||||
|
|
||||||
@ -182,7 +183,13 @@ clutter_stage_egl_realize (ClutterActor *actor)
|
|||||||
/* FIXME */
|
/* FIXME */
|
||||||
}
|
}
|
||||||
|
|
||||||
CLUTTER_SET_PRIVATE_FLAGS(actor, CLUTTER_ACTOR_SYNC_MATRICES);
|
clutter_stage_get_perspectivex (CLUTTER_STAGE (actor), &perspective);
|
||||||
|
cogl_setup_viewport (clutter_actor_get_width (actor),
|
||||||
|
clutter_actor_get_height (actor),
|
||||||
|
perspective.fovy,
|
||||||
|
perspective.aspect,
|
||||||
|
perspective.z_near,
|
||||||
|
perspective.z_far);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -129,6 +129,7 @@ clutter_stage_glx_realize (ClutterActor *actor)
|
|||||||
{
|
{
|
||||||
ClutterStageGLX *stage_glx = CLUTTER_STAGE_GLX (actor);
|
ClutterStageGLX *stage_glx = CLUTTER_STAGE_GLX (actor);
|
||||||
gboolean is_offscreen;
|
gboolean is_offscreen;
|
||||||
|
ClutterPerspective perspective;
|
||||||
|
|
||||||
CLUTTER_NOTE (MISC, "Realizing main stage");
|
CLUTTER_NOTE (MISC, "Realizing main stage");
|
||||||
|
|
||||||
@ -294,7 +295,13 @@ clutter_stage_glx_realize (ClutterActor *actor)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CLUTTER_SET_PRIVATE_FLAGS(actor, CLUTTER_ACTOR_SYNC_MATRICES);
|
clutter_stage_get_perspectivex (CLUTTER_STAGE (actor), &perspective);
|
||||||
|
cogl_setup_viewport (clutter_actor_get_width (actor),
|
||||||
|
clutter_actor_get_height (actor),
|
||||||
|
perspective.fovy,
|
||||||
|
perspective.aspect,
|
||||||
|
perspective.z_near,
|
||||||
|
perspective.z_far);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -42,6 +42,7 @@ clutter_stage_sdl_realize (ClutterActor *actor)
|
|||||||
ClutterStageSDL *stage_sdl = CLUTTER_STAGE_SDL (actor);
|
ClutterStageSDL *stage_sdl = CLUTTER_STAGE_SDL (actor);
|
||||||
|
|
||||||
gboolean is_offscreen, is_fullscreen;
|
gboolean is_offscreen, is_fullscreen;
|
||||||
|
ClutterPerspective perspective;
|
||||||
|
|
||||||
CLUTTER_NOTE (BACKEND, "Realizing main stage");
|
CLUTTER_NOTE (BACKEND, "Realizing main stage");
|
||||||
|
|
||||||
@ -77,7 +78,13 @@ clutter_stage_sdl_realize (ClutterActor *actor)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
CLUTTER_SET_PRIVATE_FLAGS(actor, CLUTTER_ACTOR_SYNC_MATRICES);
|
clutter_stage_get_perspectivex (CLUTTER_STAGE (actor), &perspective);
|
||||||
|
cogl_setup_viewport (clutter_actor_get_width (actor),
|
||||||
|
clutter_actor_get_height (actor),
|
||||||
|
perspective.fovy,
|
||||||
|
perspective.aspect,
|
||||||
|
perspective.z_near,
|
||||||
|
perspective.z_far);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
noinst_PROGRAMS = test-textures test-events test-offscreen test-scale \
|
noinst_PROGRAMS = test-textures test-events test-offscreen test-scale \
|
||||||
test-actors test-behave test-text test-entry
|
test-actors test-behave test-text test-entry test-project
|
||||||
|
|
||||||
INCLUDES = -I$(top_srcdir)/
|
INCLUDES = -I$(top_srcdir)/
|
||||||
LDADD = $(top_builddir)/clutter/libclutter-@CLUTTER_FLAVOUR@-@CLUTTER_MAJORMINOR@.la
|
LDADD = $(top_builddir)/clutter/libclutter-@CLUTTER_FLAVOUR@-@CLUTTER_MAJORMINOR@.la
|
||||||
@ -14,3 +14,4 @@ test_actor_SOURCES = test-actors.c
|
|||||||
test_behave_SOURCES = test-behave.c
|
test_behave_SOURCES = test-behave.c
|
||||||
test_text_SOURCES = test-text.c
|
test_text_SOURCES = test-text.c
|
||||||
test_entry_SOURCES = test-entry.c
|
test_entry_SOURCES = test-entry.c
|
||||||
|
test_project_SOURCES = test-project.c
|
Loading…
Reference in New Issue
Block a user