diff options
author | Ton Roosendaal <ton@blender.org> | 2004-09-19 21:44:20 +0400 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2004-09-19 21:44:20 +0400 |
commit | 74cd2db33749740b135162eb46705f799a735431 (patch) | |
tree | 637a156e97ff4bf116065c3cd1aa218bb4a8d6fa /source/blender | |
parent | e99320e7d21232c154b2c9d4a7d38e116b95b9c2 (diff) |
Removed all calls to object_wave in code, and moved it into the
mesh_modifier() in deform.c.
Now wave works on top of hooks, before lattice/curve deform and armature.
But together!
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/BKE_effect.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/blender.c | 5 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/deform.c | 6 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/displist.c | 15 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/effect.c | 26 | ||||
-rw-r--r-- | source/blender/renderconverter/intern/convertBlenderScene.c | 8 | ||||
-rw-r--r-- | source/blender/src/buttons_object.c | 2 | ||||
-rw-r--r-- | source/blender/src/drawobject.c | 1 |
8 files changed, 31 insertions, 34 deletions
diff --git a/source/blender/blenkernel/BKE_effect.h b/source/blender/blenkernel/BKE_effect.h index 84994672d9f..14ece28e6bd 100644 --- a/source/blender/blenkernel/BKE_effect.h +++ b/source/blender/blenkernel/BKE_effect.h @@ -60,7 +60,7 @@ void init_mv_jit(float *jit, int num,int seed2); void give_mesh_mvert(struct Mesh *me, int nr, float *co, short *no,int seed2); void build_particle_system(struct Object *ob); void calc_wave_deform(struct WaveEff *wav, float ctime, float *co); -void object_wave(struct Object *ob); +int object_wave(struct Object *ob); #endif diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c index 00cd8771ff0..c0be3d71ec2 100644 --- a/source/blender/blenkernel/intern/blender.c +++ b/source/blender/blenkernel/intern/blender.c @@ -75,7 +75,6 @@ #include "BKE_main.h" #include "BKE_object.h" #include "BKE_scene.h" -#include "BKE_effect.h" #include "BKE_curve.h" #include "BKE_font.h" @@ -345,10 +344,6 @@ static void setup_app_data(BlendFileData *bfd, char *filename) Curve *cu= ob->data; if(cu->nurb.first==0) text_to_curve(ob, 0); } - else if(ob->type==OB_MESH) { - makeDispList(ob); - if(ob->effect.first) object_wave(ob); - } } if (!G.background) { diff --git a/source/blender/blenkernel/intern/deform.c b/source/blender/blenkernel/intern/deform.c index f3eab76a465..290538013eb 100644 --- a/source/blender/blenkernel/intern/deform.c +++ b/source/blender/blenkernel/intern/deform.c @@ -40,6 +40,7 @@ #include "MEM_guardedalloc.h" #include "DNA_curve_types.h" +#include "DNA_effect_types.h" #include "DNA_lattice_types.h" #include "DNA_mesh_types.h" #include "DNA_meshdata_types.h" @@ -48,6 +49,7 @@ #include "BKE_curve.h" #include "BKE_deform.h" #include "BKE_displist.h" +#include "BKE_effect.h" #include "BKE_lattice.h" #include "BKE_utildefines.h" @@ -209,6 +211,7 @@ int mesh_modifier(Object *ob, char mode) /* conditions if it's needed */ if(ob->hooks.first); + else if(ob->effect.first); // weak... particles too else if(ob->parent && ob->parent->type==OB_LATTICE); else if(ob->parent && ob->partype==PARSKEL); else return 0; @@ -231,6 +234,8 @@ int mesh_modifier(Object *ob, char mode) } } + if(ob->effect.first) done |= object_wave(ob); + /* deform: input mesh, output ob dl_verts. is used by subsurf */ done |= object_deform(ob); @@ -251,6 +256,7 @@ int mesh_modifier(Object *ob, char mode) } } } + } else { // end if(mvert) { diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c index dfae3c6b12b..63f344077cb 100644 --- a/source/blender/blenkernel/intern/displist.c +++ b/source/blender/blenkernel/intern/displist.c @@ -51,6 +51,7 @@ #include "DNA_texture_types.h" #include "DNA_meta_types.h" #include "DNA_curve_types.h" +#include "DNA_effect_types.h" #include "DNA_listBase.h" #include "DNA_lamp_types.h" #include "DNA_object_types.h" @@ -1759,8 +1760,6 @@ void makeDispList(Object *ob) mesh_modifier(ob, 's'); } - if(ob->effect.first) object_wave(ob); - if (mesh_uses_displist(me)) { /* subsurf */ DispListMesh *dlm; @@ -1782,6 +1781,7 @@ void makeDispList(Object *ob) } if(ob!=G.obedit) mesh_modifier(ob, 'e'); + } else if(ob->type==OB_MBALL) { @@ -2395,7 +2395,16 @@ void test_all_displists(void) } } else if(ob->type==OB_MESH) { - if(ob->effect.first) object_wave(ob); + if(ob->effect.first) { + Effect *eff= ob->effect.first; + while(eff) { + if(eff->type==EFF_WAVE) { + freedisplist_object(ob); + break; + } + eff= eff->next; + } + } if(ob!=G.obedit) { if(( ((Mesh *)(ob->data))->key )||(ob->effect.first)) freedisplist_object(ob); //makeDispList(ob); diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c index ef614766292..4249e5eef5b 100644 --- a/source/blender/blenkernel/intern/effect.c +++ b/source/blender/blenkernel/intern/effect.c @@ -1424,14 +1424,16 @@ void calc_wave_deform(WaveEff *wav, float ctime, float *co) } } -void object_wave(Object *ob) +/* return 1 if deformed + Note: it works on mvert now, so assumes to be callied in modifier stack \ +*/ +int object_wave(Object *ob) { WaveEff *wav; - DispList *dl; Mesh *me; MVert *mvert; - float *fp, ctime; - int a, first; + float ctime; + int a; /* is there a wave */ wav= ob->effect.first; @@ -1439,19 +1441,13 @@ void object_wave(Object *ob) if(wav->type==EFF_WAVE) break; wav= wav->next; } - if(wav==0) return; + if(wav==NULL) return 0; if(ob->type==OB_MESH) { ctime= bsystem_time(ob, 0, (float)G.scene->r.cfra, 0.0); - first= 1; me= ob->data; - dl= find_displist_create(&ob->disp, DL_VERTS); - - if(dl->verts) MEM_freeN(dl->verts); - dl->nr= me->totvert; - dl->verts= MEM_mallocN(3*sizeof(float)*me->totvert, "wave"); wav= ob->effect.first; while(wav) { @@ -1462,15 +1458,13 @@ void object_wave(Object *ob) if(wav->damp==0) wav->damp= 10.0f; mvert= me->mvert; - fp= dl->verts; - for(a=0; a<me->totvert; a++, mvert++, fp+=3) { - if(first) VECCOPY(fp, mvert->co); - calc_wave_deform(wav, ctime, fp); + for(a=0; a<me->totvert; a++, mvert++) { + calc_wave_deform(wav, ctime, mvert->co); } - first= 0; } wav= wav->next; } } + return 1; } diff --git a/source/blender/renderconverter/intern/convertBlenderScene.c b/source/blender/renderconverter/intern/convertBlenderScene.c index 1b43963f64d..6243fab6f27 100644 --- a/source/blender/renderconverter/intern/convertBlenderScene.c +++ b/source/blender/renderconverter/intern/convertBlenderScene.c @@ -1268,14 +1268,6 @@ static void init_render_mesh(Object *ob) if(me->key) do_puno= 1; - if(ob->effect.first) { - Effect *eff= ob->effect.first; - while(eff) { - if(eff->type==EFF_WAVE) do_puno= 1; - eff= eff->next; - } - } - if(me->orco==0) { need_orco= 0; for(a=1; a<=ob->totcol; a++) { diff --git a/source/blender/src/buttons_object.c b/source/blender/src/buttons_object.c index 29fa70a1644..8b39da84789 100644 --- a/source/blender/src/buttons_object.c +++ b/source/blender/src/buttons_object.c @@ -1337,7 +1337,7 @@ void do_effects_panels(unsigned short event) while(eff) { if(eff->flag & SELECT) { if(eff->type==EFF_PARTICLE) build_particle_system(ob); - else if(eff->type==EFF_WAVE) object_wave(ob); + else if(eff->type==EFF_WAVE) freedisplist(&ob->disp); } eff= eff->next; } diff --git a/source/blender/src/drawobject.c b/source/blender/src/drawobject.c index 71e4de14134..d4f29662304 100644 --- a/source/blender/src/drawobject.c +++ b/source/blender/src/drawobject.c @@ -3911,6 +3911,7 @@ void draw_object(Base *base) if(ob->disp.first==NULL) { if(ob->parent && ob->partype==PARSKEL) makeDispList(ob); else if(ob->hooks.first) makeDispList(ob); + else if(ob->effect.first) makeDispList(ob); else if(me->disp.first==NULL && mesh_uses_displist(me)) makeDispList(ob); } } |