[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27719] branches/render25/source/blender: Render Branch: tweak to group transform, now group matrix is applied in
Brecht Van Lommel
brecht at blender.org
Wed Mar 24 16:59:44 CET 2010
Revision: 27719
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27719
Author: blendix
Date: 2010-03-24 16:59:44 +0100 (Wed, 24 Mar 2010)
Log Message:
-----------
Render Branch: tweak to group transform, now group matrix is applied in
where_is_object_time instead of object_handle_update to ensure it is always
applied. Still a problem with dragon tail, will attempt to fix that next.
Modified Paths:
--------------
branches/render25/source/blender/blenkernel/BKE_object.h
branches/render25/source/blender/blenkernel/intern/group.c
branches/render25/source/blender/blenkernel/intern/object.c
branches/render25/source/blender/blenkernel/intern/scene.c
branches/render25/source/blender/editors/transform/transform_conversions.c
branches/render25/source/blender/makesdna/DNA_object_types.h
Modified: branches/render25/source/blender/blenkernel/BKE_object.h
===================================================================
--- branches/render25/source/blender/blenkernel/BKE_object.h 2010-03-24 15:43:22 UTC (rev 27718)
+++ branches/render25/source/blender/blenkernel/BKE_object.h 2010-03-24 15:59:44 UTC (rev 27719)
@@ -121,7 +121,7 @@
void *object_tfm_backup(struct Object *ob);
void object_tfm_restore(struct Object *ob, void *obtfm_pt);
-void object_handle_update(struct Scene *scene, struct Object *ob, float groupmat[][4]);
+void object_handle_update(struct Scene *scene, struct Object *ob);
float give_timeoffset(struct Object *ob);
int give_obdata_texspace(struct Object *ob, short **texflag, float **loc, float **size, float **rot);
Modified: branches/render25/source/blender/blenkernel/intern/group.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/group.c 2010-03-24 15:43:22 UTC (rev 27718)
+++ branches/render25/source/blender/blenkernel/intern/group.c 2010-03-24 15:59:44 UTC (rev 27719)
@@ -354,6 +354,10 @@
if(go->ob) {
mul_m4_m4m4(go->ob->obmat, go->ob->obmat, parmat);
mul_m4_m4m4(go->ob->parentinv, go->ob->parentinv, iparmat);
+
+ /* this is applied in where_is_object_time in case the
+ matrix is recalculated */
+ go->ob->groupmat= (float*)parmat;
}
}
}
@@ -372,7 +376,7 @@
go->ob->recalc= go->recalc;
group_replaces_nla(parent, go->ob, 's');
- object_handle_update(scene, go->ob, parmat);
+ object_handle_update(scene, go->ob);
group_replaces_nla(parent, go->ob, 'e');
/* leave recalc tags in case group members are in normal scene */
@@ -387,7 +391,7 @@
/* only do existing tags, as set by regular depsgraph */
for(go= group->gobject.first; go; go= go->next)
if(go->ob && go->ob->recalc)
- object_handle_update(scene, go->ob, parmat);
+ object_handle_update(scene, go->ob);
}
if(group->id.lib) {
@@ -395,6 +399,8 @@
if(go->ob) {
mul_m4_m4m4(go->ob->obmat, go->ob->obmat, iparmat);
mul_m4_m4m4(go->ob->parentinv, go->ob->parentinv, parmat);
+
+ go->ob->groupmat= NULL;
}
}
}
Modified: branches/render25/source/blender/blenkernel/intern/object.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/object.c 2010-03-24 15:43:22 UTC (rev 27718)
+++ branches/render25/source/blender/blenkernel/intern/object.c 2010-03-24 15:59:44 UTC (rev 27719)
@@ -2065,6 +2065,14 @@
/* set negative scale flag in object */
if(is_negative_m4(ob->obmat)) ob->transflag |= OB_NEG_SCALE;
else ob->transflag &= ~OB_NEG_SCALE;
+
+ if(ob->groupmat) {
+ /* if this is being called as part of dupligroup evaluation, we
+ want the object matrices to be transformed by the duplicator
+ so that e.g. physics systems are executed in the correct
+ space. this is enabled in group_handle_recalc_and_update */
+ mul_m4_m4m4(ob->obmat, ob->obmat, (float(*)[4])ob->groupmat);
+ }
}
static void solve_parenting (Scene *scene, Object *ob, Object *par, float obmat[][4], float slowmat[][4], int simul)
@@ -2477,10 +2485,9 @@
/* the main object update call, for object matrix, constraints, keys and displist (modifiers) */
/* requires flags to be set! */
-void object_handle_update(Scene *scene, Object *ob, float groupmat[][4])
+void object_handle_update(Scene *scene, Object *ob)
{
if(ob->recalc & OB_RECALC) {
-
/* XXX new animsys warning: depsgraph tag OB_RECALC_DATA should not skip drivers,
which is only in where_is_object now */
if(ob->recalc & OB_RECALC) {
@@ -2493,17 +2500,8 @@
// printf("ob proxy copy, lib ob %s proxy %s\n", ob->id.name, ob->proxy_from->id.name);
copy_m4_m4(ob->obmat, ob->proxy_from->obmat);
}
- else {
+ else
where_is_object(scene, ob);
-
- if(groupmat) {
- /* if this is being called as part of dupligroup evaluation, we
- want the object matrices to be transformed by the duplicator
- so that e.g. physics systems are executed in the correct
- space. this is here because it must run before recalc data. */
- mul_m4_m4m4(ob->obmat, ob->obmat, groupmat);
- }
- }
}
if(ob->recalc & OB_RECALC_DATA) {
@@ -2605,9 +2603,9 @@
/* set pointer in library proxy target, for copying, but restore it */
ob->proxy->proxy_from= ob;
// printf("call update, lib ob %s proxy %s\n", ob->proxy->id.name, ob->id.name);
- object_handle_update(scene, ob->proxy, NULL);
+ object_handle_update(scene, ob->proxy);
}
-
+
ob->recalc &= ~OB_RECALC;
}
Modified: branches/render25/source/blender/blenkernel/intern/scene.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/scene.c 2010-03-24 15:43:22 UTC (rev 27718)
+++ branches/render25/source/blender/blenkernel/intern/scene.c 2010-03-24 15:59:44 UTC (rev 27719)
@@ -898,7 +898,7 @@
for(base= sce->base.first; base; base= base->next) {
ob= base->object;
- object_handle_update(sce, ob, NULL); // bke_object.h
+ object_handle_update(sce, ob); // bke_object.h
/* only update layer when an ipo */
// XXX old animation system
@@ -922,11 +922,11 @@
dependencies on sets, but not the other way around. */
if(scene->set) {
for(SETLOOPER(scene->set, base))
- object_handle_update(scene, base->object, NULL);
+ object_handle_update(scene, base->object);
}
for(base= scene->base.first; base; base= base->next) {
- object_handle_update(scene, base->object, NULL);
+ object_handle_update(scene, base->object);
}
/* recalc scene animation data here (for sequencer) */
Modified: branches/render25/source/blender/editors/transform/transform_conversions.c
===================================================================
--- branches/render25/source/blender/editors/transform/transform_conversions.c 2010-03-24 15:43:22 UTC (rev 27718)
+++ branches/render25/source/blender/editors/transform/transform_conversions.c 2010-03-24 15:59:44 UTC (rev 27719)
@@ -4292,7 +4292,7 @@
/* handle pending update events, otherwise they got copied below */
for (base= scene->base.first; base; base= base->next) {
if(base->object->recalc)
- object_handle_update(t->scene, base->object, NULL);
+ object_handle_update(t->scene, base->object);
}
for (base= scene->base.first; base; base= base->next) {
Modified: branches/render25/source/blender/makesdna/DNA_object_types.h
===================================================================
--- branches/render25/source/blender/makesdna/DNA_object_types.h 2010-03-24 15:43:22 UTC (rev 27718)
+++ branches/render25/source/blender/makesdna/DNA_object_types.h 2010-03-24 15:59:44 UTC (rev 27719)
@@ -250,12 +250,12 @@
int lastDataMask; /* the custom data layer mask that was last used to calculate derivedDeform and derivedFinal */
unsigned int state; /* bit masks of game controllers that are active */
unsigned int init_state; /* bit masks of initial state as recorded by the users */
+ unsigned int pad2;
- int pad2;
-
ListBase gpulamp; /* runtime, for lamps only */
ListBase pc_ids;
ListBase *duplilist; /* for temporary dupli list storage, only for use by RNA API */
+ float *groupmat; /* runtime, temporarily set during group evaluation */
} Object;
/* Warning, this is not used anymore because hooks are now modifiers */
More information about the Bf-blender-cvs
mailing list