From 8e73b770d4e9da71fb727444611657732cc52047 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 7 Jan 2015 02:02:55 +1100 Subject: Remove slurph shape-key feature This is an old option which wasn't working in over a year without complaint. --- source/blender/blenkernel/BKE_key.h | 11 +- source/blender/blenkernel/BKE_object.h | 2 +- source/blender/blenkernel/intern/displist.c | 2 +- source/blender/blenkernel/intern/key.c | 194 +++++---------------- source/blender/blenkernel/intern/object.c | 20 +-- source/blender/editors/object/object_shapekey.c | 7 +- source/blender/makesdna/DNA_key_types.h | 6 +- source/blender/makesrna/intern/rna_key.c | 7 - source/blender/makesrna/intern/rna_object_api.c | 3 +- source/blender/modifiers/intern/MOD_shapekey.c | 7 +- .../blender/render/intern/source/convertblender.c | 7 +- 11 files changed, 76 insertions(+), 190 deletions(-) (limited to 'source') diff --git a/source/blender/blenkernel/BKE_key.h b/source/blender/blenkernel/BKE_key.h index 31b2c7dc2b9..9535b921736 100644 --- a/source/blender/blenkernel/BKE_key.h +++ b/source/blender/blenkernel/BKE_key.h @@ -60,9 +60,11 @@ void key_curve_position_weights(float t, float data[4], int type); void key_curve_tangent_weights(float t, float data[4], int type); void key_curve_normal_weights(float t, float data[4], int type); -float *BKE_key_evaluate_object_ex(struct Scene *scene, struct Object *ob, int *r_totelem, - float *arr, size_t arr_size); -float *BKE_key_evaluate_object(struct Scene *scene, struct Object *ob, int *r_totelem); +float *BKE_key_evaluate_object_ex( + struct Object *ob, int *r_totelem, + float *arr, size_t arr_size); +float *BKE_key_evaluate_object( + struct Object *ob, int *r_totelem); struct Key *BKE_key_from_object(struct Object *ob); struct KeyBlock *BKE_keyblock_from_object(struct Object *ob); @@ -111,9 +113,6 @@ bool BKE_keyblock_move(struct Object *ob, int org_index, int new_index); bool BKE_keyblock_is_basis(struct Key *key, const int index); -/* key.c */ -extern int slurph_opt; - #ifdef __cplusplus }; #endif diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h index 1bfd26d4f8c..1bdbc339f21 100644 --- a/source/blender/blenkernel/BKE_object.h +++ b/source/blender/blenkernel/BKE_object.h @@ -181,7 +181,7 @@ int BKE_object_obdata_texspace_get(struct Object *ob, short **r_texflag, float * int BKE_object_insert_ptcache(struct Object *ob); void BKE_object_delete_ptcache(struct Object *ob, int index); -struct KeyBlock *BKE_object_insert_shape_key(struct Scene *scene, struct Object *ob, const char *name, const bool from_mix); +struct KeyBlock *BKE_object_insert_shape_key(struct Object *ob, const char *name, const bool from_mix); bool BKE_object_is_child_recursive(struct Object *ob_parent, struct Object *ob_child); bool BKE_object_is_animated(struct Scene *scene, struct Object *ob); diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c index 80a8d373220..9ea5a5638b9 100644 --- a/source/blender/blenkernel/intern/displist.c +++ b/source/blender/blenkernel/intern/displist.c @@ -813,7 +813,7 @@ static void curve_calc_modifiers_pre(Scene *scene, Object *ob, ListBase *nurb, required_mode |= eModifierMode_Editmode; if (cu->editnurb == NULL) { - keyVerts = BKE_key_evaluate_object(scene, ob, &numVerts); + keyVerts = BKE_key_evaluate_object(ob, &numVerts); if (keyVerts) { /* split coords from key data, the latter also includes diff --git a/source/blender/blenkernel/intern/key.c b/source/blender/blenkernel/intern/key.c index 3ba0c6e5ffa..32e95e7ad92 100644 --- a/source/blender/blenkernel/intern/key.c +++ b/source/blender/blenkernel/intern/key.c @@ -73,10 +73,6 @@ #define IPO_BEZTRIPLE 100 #define IPO_BPOINT 101 -/* extern, not threadsafe */ -int slurph_opt = 1; - - void BKE_key_free(Key *key) { KeyBlock *kb; @@ -607,7 +603,7 @@ static void cp_key(const int start, int end, const int tot, char *poin, Key *key k1 = key_block_get_data(key, actkb, kb, &freek1); kref = key_block_get_data(key, actkb, key->refkey, &freekref); - /* this exception is needed for slurphing */ + /* this exception is needed curves with multiple splines */ if (start != 0) { poin += poinsize * start; @@ -891,7 +887,7 @@ static void do_key(const int start, int end, const int tot, char *poin, Key *key } } - /* this exception needed for slurphing */ + /* this exception is needed for curves with multiple splines */ if (start != 0) { poin += poinsize * start; @@ -1168,53 +1164,29 @@ void BKE_keyblock_free_per_block_weights(Key *key, float **per_keyblock_weights, MEM_freeN(per_keyblock_weights); } -static void do_mesh_key(Scene *scene, Object *ob, Key *key, char *out, const int tot) +static void do_mesh_key(Object *ob, Key *key, char *out, const int tot) { KeyBlock *k[4], *actkb = BKE_keyblock_from_object(ob); float t[4]; int flag = 0; - if (key->slurph && key->type != KEY_RELATIVE) { + if (key->type == KEY_RELATIVE) { + WeightsArrayCache cache = {0, NULL}; + float **per_keyblock_weights; + per_keyblock_weights = BKE_keyblock_get_per_block_weights(ob, key, &cache); + BKE_key_evaluate_relative(0, tot, tot, (char *)out, key, actkb, per_keyblock_weights, KEY_MODE_DUMMY); + BKE_keyblock_free_per_block_weights(key, per_keyblock_weights, &cache); + } + else { const float ctime_scaled = key->ctime / 100.0f; - float delta = (float)key->slurph / tot; - float cfra = BKE_scene_frame_get(scene); - int step, a; - - if (tot > 100 && slurph_opt) { - step = tot / 50; - delta *= step; - /* in do_key and cp_key the case a>tot is handled */ - } - else { - step = 1; - } - for (a = 0; a < tot; a += step, cfra += delta) { - flag = setkeys(ctime_scaled, &key->block, k, t, 0); + flag = setkeys(ctime_scaled, &key->block, k, t, 0); - if (flag == 0) - do_key(a, a + step, tot, (char *)out, key, actkb, k, t, KEY_MODE_DUMMY); - else - cp_key(a, a + step, tot, (char *)out, key, actkb, k[2], NULL, KEY_MODE_DUMMY); - } - } - else { - if (key->type == KEY_RELATIVE) { - WeightsArrayCache cache = {0, NULL}; - float **per_keyblock_weights; - per_keyblock_weights = BKE_keyblock_get_per_block_weights(ob, key, &cache); - BKE_key_evaluate_relative(0, tot, tot, (char *)out, key, actkb, per_keyblock_weights, KEY_MODE_DUMMY); - BKE_keyblock_free_per_block_weights(key, per_keyblock_weights, &cache); + if (flag == 0) { + do_key(0, tot, tot, (char *)out, key, actkb, k, t, KEY_MODE_DUMMY); } else { - const float ctime_scaled = key->ctime / 100.0f; - - flag = setkeys(ctime_scaled, &key->block, k, t, 0); - - if (flag == 0) - do_key(0, tot, tot, (char *)out, key, actkb, k, t, KEY_MODE_DUMMY); - else - cp_key(0, tot, tot, (char *)out, key, actkb, k[2], NULL, KEY_MODE_DUMMY); + cp_key(0, tot, tot, (char *)out, key, actkb, k[2], NULL, KEY_MODE_DUMMY); } } } @@ -1259,135 +1231,63 @@ static void do_rel_cu_key(Curve *cu, Key *key, KeyBlock *actkb, char *out, const } } -static void do_curve_key(Scene *scene, Object *ob, Key *key, char *out, const int tot) +static void do_curve_key(Object *ob, Key *key, char *out, const int tot) { Curve *cu = ob->data; KeyBlock *k[4], *actkb = BKE_keyblock_from_object(ob); float t[4]; int flag = 0; - if (key->slurph && key->type != KEY_RELATIVE) { + if (key->type == KEY_RELATIVE) { + do_rel_cu_key(cu, cu->key, actkb, out, tot); + } + else { const float ctime_scaled = key->ctime / 100.0f; - float delta = (float)key->slurph / tot; - float cfra = BKE_scene_frame_get(scene); - Nurb *nu; - int i = 0, remain = 0; - int step, a; - if (tot > 100 && slurph_opt) { - step = tot / 50; - delta *= step; - /* in do_key and cp_key the case a>tot has been handled */ - } - else { - step = 1; - } + flag = setkeys(ctime_scaled, &key->block, k, t, 0); - for (nu = cu->nurb.first; nu; nu = nu->next) { - int estep, mode; - - if (nu->bp) { - mode = KEY_MODE_BPOINT; - estep = nu->pntsu * nu->pntsv; - } - else if (nu->bezt) { - mode = KEY_MODE_BEZTRIPLE; - estep = 3 * nu->pntsu; - } - else { - mode = 0; - estep = 0; - } - - a = 0; - while (a < estep) { - int count; - - if (remain <= 0) { - cfra += delta; - flag = setkeys(ctime_scaled, &key->block, k, t, 0); - - remain = step; - } - - count = min_ii(remain, estep); - if (mode == KEY_MODE_BEZTRIPLE) { - count += 3 - count % 3; - } - - if (flag == 0) - do_key(i, i + count, tot, (char *)out, key, actkb, k, t, mode); - else - cp_key(i, i + count, tot, (char *)out, key, actkb, k[2], NULL, mode); - - a += count; - i += count; - remain -= count; - } - } - } - else { - if (key->type == KEY_RELATIVE) { - do_rel_cu_key(cu, cu->key, actkb, out, tot); + if (flag == 0) { + do_cu_key(cu, key, actkb, k, t, out, tot); } else { - const float ctime_scaled = key->ctime / 100.0f; - - flag = setkeys(ctime_scaled, &key->block, k, t, 0); - - if (flag == 0) do_cu_key(cu, key, actkb, k, t, out, tot); - else cp_cu_key(cu, key, actkb, k[2], 0, tot, out, tot); + cp_cu_key(cu, key, actkb, k[2], 0, tot, out, tot); } } } -static void do_latt_key(Scene *scene, Object *ob, Key *key, char *out, const int tot) +static void do_latt_key(Object *ob, Key *key, char *out, const int tot) { Lattice *lt = ob->data; KeyBlock *k[4], *actkb = BKE_keyblock_from_object(ob); float t[4]; int flag; - if (key->slurph && key->type != KEY_RELATIVE) { - const float ctime_scaled = key->ctime / 100.0f; - float delta = (float)key->slurph / tot; - float cfra = BKE_scene_frame_get(scene); - int a; - - for (a = 0; a < tot; a++, cfra += delta) { - flag = setkeys(ctime_scaled, &key->block, k, t, 0); - - if (flag == 0) - do_key(a, a + 1, tot, out, key, actkb, k, t, KEY_MODE_DUMMY); - else - cp_key(a, a + 1, tot, out, key, actkb, k[2], NULL, KEY_MODE_DUMMY); - } + if (key->type == KEY_RELATIVE) { + float **per_keyblock_weights; + per_keyblock_weights = BKE_keyblock_get_per_block_weights(ob, key, NULL); + BKE_key_evaluate_relative(0, tot, tot, (char *)out, key, actkb, per_keyblock_weights, KEY_MODE_DUMMY); + BKE_keyblock_free_per_block_weights(key, per_keyblock_weights, NULL); } else { - if (key->type == KEY_RELATIVE) { - float **per_keyblock_weights; - per_keyblock_weights = BKE_keyblock_get_per_block_weights(ob, key, NULL); - BKE_key_evaluate_relative(0, tot, tot, (char *)out, key, actkb, per_keyblock_weights, KEY_MODE_DUMMY); - BKE_keyblock_free_per_block_weights(key, per_keyblock_weights, NULL); + const float ctime_scaled = key->ctime / 100.0f; + + flag = setkeys(ctime_scaled, &key->block, k, t, 0); + + if (flag == 0) { + do_key(0, tot, tot, (char *)out, key, actkb, k, t, KEY_MODE_DUMMY); } else { - const float ctime_scaled = key->ctime / 100.0f; - - flag = setkeys(ctime_scaled, &key->block, k, t, 0); - - if (flag == 0) - do_key(0, tot, tot, (char *)out, key, actkb, k, t, KEY_MODE_DUMMY); - else - cp_key(0, tot, tot, (char *)out, key, actkb, k[2], NULL, KEY_MODE_DUMMY); + cp_key(0, tot, tot, (char *)out, key, actkb, k[2], NULL, KEY_MODE_DUMMY); } } - + if (lt->flag & LT_OUTSIDE) outside_lattice(lt); } /* returns key coordinates (+ tilt) when key applied, NULL otherwise */ -float *BKE_key_evaluate_object_ex(Scene *scene, Object *ob, int *r_totelem, - float *arr, size_t arr_size) +float *BKE_key_evaluate_object_ex( + Object *ob, int *r_totelem, + float *arr, size_t arr_size) { Key *key = BKE_key_from_object(ob); KeyBlock *actkb = BKE_keyblock_from_object(ob); @@ -1469,10 +1369,10 @@ float *BKE_key_evaluate_object_ex(Scene *scene, Object *ob, int *r_totelem, } else { - if (ob->type == OB_MESH) do_mesh_key(scene, ob, key, out, tot); - else if (ob->type == OB_LATTICE) do_latt_key(scene, ob, key, out, tot); - else if (ob->type == OB_CURVE) do_curve_key(scene, ob, key, out, tot); - else if (ob->type == OB_SURF) do_curve_key(scene, ob, key, out, tot); + if (ob->type == OB_MESH) do_mesh_key(ob, key, out, tot); + else if (ob->type == OB_LATTICE) do_latt_key(ob, key, out, tot); + else if (ob->type == OB_CURVE) do_curve_key(ob, key, out, tot); + else if (ob->type == OB_SURF) do_curve_key(ob, key, out, tot); } if (r_totelem) { @@ -1481,9 +1381,9 @@ float *BKE_key_evaluate_object_ex(Scene *scene, Object *ob, int *r_totelem, return (float *)out; } -float *BKE_key_evaluate_object(Scene *scene, Object *ob, int *r_totelem) +float *BKE_key_evaluate_object(Object *ob, int *r_totelem) { - return BKE_key_evaluate_object_ex(scene, ob, r_totelem, NULL, 0); + return BKE_key_evaluate_object_ex(ob, r_totelem, NULL, 0); } Key *BKE_key_from_object(Object *ob) diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index f6b328eb8e8..d4a2c327572 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -3347,7 +3347,7 @@ void BKE_object_delete_ptcache(Object *ob, int index) /* shape key utility function */ /************************* Mesh ************************/ -static KeyBlock *insert_meshkey(Scene *scene, Object *ob, const char *name, const bool from_mix) +static KeyBlock *insert_meshkey(Object *ob, const char *name, const bool from_mix) { Mesh *me = ob->data; Key *key = me->key; @@ -3368,7 +3368,7 @@ static KeyBlock *insert_meshkey(Scene *scene, Object *ob, const char *name, cons else { /* copy from current values */ int totelem; - float *data = BKE_key_evaluate_object(scene, ob, &totelem); + float *data = BKE_key_evaluate_object(ob, &totelem); /* create new block with prepared data */ kb = BKE_keyblock_add_ctime(key, name, false); @@ -3379,7 +3379,7 @@ static KeyBlock *insert_meshkey(Scene *scene, Object *ob, const char *name, cons return kb; } /************************* Lattice ************************/ -static KeyBlock *insert_lattkey(Scene *scene, Object *ob, const char *name, const bool from_mix) +static KeyBlock *insert_lattkey(Object *ob, const char *name, const bool from_mix) { Lattice *lt = ob->data; Key *key = lt->key; @@ -3406,7 +3406,7 @@ static KeyBlock *insert_lattkey(Scene *scene, Object *ob, const char *name, cons else { /* copy from current values */ int totelem; - float *data = BKE_key_evaluate_object(scene, ob, &totelem); + float *data = BKE_key_evaluate_object(ob, &totelem); /* create new block with prepared data */ kb = BKE_keyblock_add_ctime(key, name, false); @@ -3417,7 +3417,7 @@ static KeyBlock *insert_lattkey(Scene *scene, Object *ob, const char *name, cons return kb; } /************************* Curve ************************/ -static KeyBlock *insert_curvekey(Scene *scene, Object *ob, const char *name, const bool from_mix) +static KeyBlock *insert_curvekey(Object *ob, const char *name, const bool from_mix) { Curve *cu = ob->data; Key *key = cu->key; @@ -3446,7 +3446,7 @@ static KeyBlock *insert_curvekey(Scene *scene, Object *ob, const char *name, con else { /* copy from current values */ int totelem; - float *data = BKE_key_evaluate_object(scene, ob, &totelem); + float *data = BKE_key_evaluate_object(ob, &totelem); /* create new block with prepared data */ kb = BKE_keyblock_add_ctime(key, name, false); @@ -3457,16 +3457,16 @@ static KeyBlock *insert_curvekey(Scene *scene, Object *ob, const char *name, con return kb; } -KeyBlock *BKE_object_insert_shape_key(Scene *scene, Object *ob, const char *name, const bool from_mix) +KeyBlock *BKE_object_insert_shape_key(Object *ob, const char *name, const bool from_mix) { switch (ob->type) { case OB_MESH: - return insert_meshkey(scene, ob, name, from_mix); + return insert_meshkey(ob, name, from_mix); case OB_CURVE: case OB_SURF: - return insert_curvekey(scene, ob, name, from_mix); + return insert_curvekey(ob, name, from_mix); case OB_LATTICE: - return insert_lattkey(scene, ob, name, from_mix); + return insert_lattkey(ob, name, from_mix); default: return NULL; } diff --git a/source/blender/editors/object/object_shapekey.c b/source/blender/editors/object/object_shapekey.c index 6bb23a4a7f0..3fe8c86ef5c 100644 --- a/source/blender/editors/object/object_shapekey.c +++ b/source/blender/editors/object/object_shapekey.c @@ -75,10 +75,10 @@ /*********************** add shape key ***********************/ -static void ED_object_shape_key_add(bContext *C, Scene *scene, Object *ob, const bool from_mix) +static void ED_object_shape_key_add(bContext *C, Object *ob, const bool from_mix) { KeyBlock *kb; - if ((kb = BKE_object_insert_shape_key(scene, ob, NULL, from_mix))) { + if ((kb = BKE_object_insert_shape_key(ob, NULL, from_mix))) { Key *key = BKE_key_from_object(ob); /* for absolute shape keys, new keys may not be added last */ ob->shapenr = BLI_findindex(&key->block, kb) + 1; @@ -320,11 +320,10 @@ static int shape_key_poll(bContext *C) static int shape_key_add_exec(bContext *C, wmOperator *op) { - Scene *scene = CTX_data_scene(C); Object *ob = ED_object_context(C); const bool from_mix = RNA_boolean_get(op->ptr, "from_mix"); - ED_object_shape_key_add(C, scene, ob, from_mix); + ED_object_shape_key_add(C, ob, from_mix); return OPERATOR_FINISHED; } diff --git a/source/blender/makesdna/DNA_key_types.h b/source/blender/makesdna/DNA_key_types.h index 16e40fa52e1..60ab01c901b 100644 --- a/source/blender/makesdna/DNA_key_types.h +++ b/source/blender/makesdna/DNA_key_types.h @@ -91,10 +91,10 @@ typedef struct Key { ID *from; - short type; /* absolute or relative shape key */ - short totkey; /* (totkey == BLI_listbase_count(&key->block)) */ - short slurph; /* quaint feature to delay moving points based on their order (Key->type == KEY_NORMAL) only */ + int totkey; /* (totkey == BLI_listbase_count(&key->block)) */ short flag; + char type; /* absolute or relative shape key */ + char pad2; /* only used when (Key->type == KEY_NORMAL), this value is used as a time slider, * rather then using the scenes time, this value can be animated to give greater control */ diff --git a/source/blender/makesrna/intern/rna_key.c b/source/blender/makesrna/intern/rna_key.c index 7d10511d1c4..8a3626de81d 100644 --- a/source/blender/makesrna/intern/rna_key.c +++ b/source/blender/makesrna/intern/rna_key.c @@ -675,13 +675,6 @@ static void rna_def_key(BlenderRNA *brna) RNA_def_property_range(prop, MINFRAME, MAXFRAME); RNA_def_property_ui_text(prop, "Evaluation Time", "Evaluation time for absolute shape keys"); RNA_def_property_update(prop, 0, "rna_Key_update_data"); - - prop = RNA_def_property(srna, "slurph", PROP_INT, PROP_UNSIGNED); - RNA_def_property_int_sdna(prop, NULL, "slurph"); - RNA_def_property_range(prop, -500, 500); - RNA_def_property_ui_text(prop, "Slurph", - "Create a delay (in frames) in applying key positions, first vertex goes first"); - RNA_def_property_update(prop, 0, "rna_Key_update_data"); } void RNA_def_key(BlenderRNA *brna) diff --git a/source/blender/makesrna/intern/rna_object_api.c b/source/blender/makesrna/intern/rna_object_api.c index 3dc75ef83f6..fa356ed43d0 100644 --- a/source/blender/makesrna/intern/rna_object_api.c +++ b/source/blender/makesrna/intern/rna_object_api.c @@ -225,10 +225,9 @@ static void rna_Object_free_duplilist(Object *ob) static PointerRNA rna_Object_shape_key_add(Object *ob, bContext *C, ReportList *reports, const char *name, int from_mix) { - Scene *scene = CTX_data_scene(C); KeyBlock *kb = NULL; - if ((kb = BKE_object_insert_shape_key(scene, ob, name, from_mix))) { + if ((kb = BKE_object_insert_shape_key(ob, name, from_mix))) { PointerRNA keyptr; RNA_pointer_create((ID *)ob->data, &RNA_ShapeKey, kb, &keyptr); diff --git a/source/blender/modifiers/intern/MOD_shapekey.c b/source/blender/modifiers/intern/MOD_shapekey.c index 45725d1c453..f3327a03f2c 100644 --- a/source/blender/modifiers/intern/MOD_shapekey.c +++ b/source/blender/modifiers/intern/MOD_shapekey.c @@ -44,7 +44,7 @@ #include "MOD_modifiertypes.h" -static void deformVerts(ModifierData *md, Object *ob, +static void deformVerts(ModifierData *UNUSED(md), Object *ob, DerivedMesh *UNUSED(derivedData), float (*vertexCos)[3], int numVerts, @@ -54,8 +54,9 @@ static void deformVerts(ModifierData *md, Object *ob, if (key && key->block.first) { int deformedVerts_tot; - BKE_key_evaluate_object_ex(md->scene, ob, &deformedVerts_tot, - (float *)vertexCos, sizeof(*vertexCos) * numVerts); + BKE_key_evaluate_object_ex( + ob, &deformedVerts_tot, + (float *)vertexCos, sizeof(*vertexCos) * numVerts); } } diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index b0800c2c27b..6437bbafe87 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -5134,8 +5134,7 @@ void RE_Database_FromScene(Render *re, Main *bmain, Scene *scene, unsigned int l re->totvlak=re->totvert=re->totstrand=re->totlamp=re->tothalo= 0; re->lights.first= re->lights.last= NULL; re->lampren.first= re->lampren.last= NULL; - - slurph_opt= 0; + re->i.partsdone = false; /* signal now in use for previewrender */ /* in localview, lamps are using normal layers, objects only local bits */ @@ -5197,8 +5196,6 @@ void RE_Database_FromScene(Render *re, Main *bmain, Scene *scene, unsigned int l re->i.totlamp= re->totlamp; re->stats_draw(re->sdh, &re->i); } - - slurph_opt= 1; } void RE_Database_Preprocess(Render *re) @@ -5316,8 +5313,6 @@ static void database_fromscene_vectors(Render *re, Scene *scene, unsigned int la re->totvlak=re->totvert=re->totstrand=re->totlamp=re->tothalo= 0; re->i.totface=re->i.totvert=re->i.totstrand=re->i.totlamp=re->i.tothalo= 0; re->lights.first= re->lights.last= NULL; - - slurph_opt= 0; /* in localview, lamps are using normal layers, objects only local bits */ if (re->lay & 0xFF000000) -- cgit v1.2.3