Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Leung <aligorith@gmail.com>2012-06-07 09:29:10 +0400
committerJoshua Leung <aligorith@gmail.com>2012-06-07 09:29:10 +0400
commite69ec8be5554a774612b8eeb15a2f00a327cc795 (patch)
tree16074086868495da806a47e2e0a3d8c6967edebe
parentebb2dc84fcbb344ae3625e0e9d89b724d5378ca0 (diff)
Bugfix [#31735] Performance issue related to object parenting to armature
In the file included with the bugreport, framerates were dropping from 60fps to 11fps for an armature with several lattices parented, and a 5fps drop everytime an object was parented to the armature. Upon (re-)inspection of the code, it became apparent that this was being caused by a block of code that would recalculate the parent (perhaps recursively) as it thought the parent state was for the wrong timestamp. However, the timestamps this was using was never really updated (except for a single place, which set it to a single fixed value to force recalculations to take place), which meant that this branch was run all the time. AFACT, this is a remnant from some of the old timeoffset stuff + pre-Depsgraph timestamping hacks that are no longer used/set.
-rw-r--r--source/blender/blenkernel/intern/object.c25
-rw-r--r--source/blender/blenkernel/intern/scene.c2
-rw-r--r--source/blender/editors/space_view3d/drawobject.c3
3 files changed, 2 insertions, 28 deletions
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 04631729d7a..16b699f16f9 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -1927,11 +1927,6 @@ static int where_is_object_parslow(Object *ob, float obmat[4][4], float slowmat[
void BKE_object_where_is_calc_time(Scene *scene, Object *ob, float ctime)
{
float slowmat[4][4] = MAT4_UNITY;
- float stime = ctime;
-
- /* new version: correct parent+vertexparent and track+parent */
- /* this one only calculates direct attached parent and track */
- /* is faster, but should keep track of timeoffs */
if (ob == NULL) return;
@@ -1941,21 +1936,8 @@ void BKE_object_where_is_calc_time(Scene *scene, Object *ob, float ctime)
if (ob->parent) {
Object *par = ob->parent;
- /* hurms, code below conflicts with depgraph... (ton) */
- /* and even worse, it gives bad effects for NLA stride too (try ctime != par->ctime, with MBlur) */
- if (stime != par->ctime) {
- // only for ipo systems?
- Object tmp = *par;
-
- if (par->proxy_from) ; // was a copied matrix, no where_is! bad...
- else BKE_object_where_is_calc_time(scene, par, ctime);
-
- solve_parenting(scene, ob, par, ob->obmat, slowmat, 0);
-
- *par = tmp;
- }
- else
- solve_parenting(scene, ob, par, ob->obmat, slowmat, 0);
+ /* calculate parent matrix */
+ solve_parenting(scene, ob, par, ob->obmat, slowmat, 0);
/* "slow parent" is definitely not threadsafe, and may also give bad results jumping around
* An old-fashioned hack which probably doesn't really cut it anymore
@@ -1974,10 +1956,7 @@ void BKE_object_where_is_calc_time(Scene *scene, Object *ob, float ctime)
bConstraintOb *cob;
cob = constraints_make_evalob(scene, ob, NULL, CONSTRAINT_OBTYPE_OBJECT);
-
- /* constraints need ctime, not stime. Some call BKE_object_where_is_calc_time and bsystem_time */
solve_constraints(&ob->constraints, cob, ctime);
-
constraints_clear_evalob(cob);
}
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index d9f1a6372ee..1113555e3bf 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -610,8 +610,6 @@ void BKE_scene_set_background(Main *bmain, Scene *scene)
/* not too nice... for recovering objects with lost data */
//if (ob->pose == NULL) base->flag &= ~OB_POSEMODE;
ob->flag = base->flag;
-
- ob->ctime = -1234567.0; /* force ipo to be calculated later */
}
/* no full animation update, this to enable render code to work (render code calls own animation updates) */
}
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index 63dc6c21863..73d941f62ce 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -6578,9 +6578,6 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
/* no return after this point, otherwise leaks */
view3d_cached_text_draw_begin();
- /* patch? children objects with a timeoffs change the parents. How to solve! */
- /* if ( ((int)ob->ctime) != F_(scene->r.cfra)) BKE_object_where_is_calc(scene, ob); */
-
/* draw motion paths (in view space) */
if (ob->mpath && (v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) {
bAnimVizSettings *avs = &ob->avs;