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
path: root/source
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2003-11-21 15:30:15 +0300
committerTon Roosendaal <ton@blender.org>2003-11-21 15:30:15 +0300
commit71500a2df1bc309a5d011c39f8af462cf977f64f (patch)
tree6a621cb917d6ee8288ae7ccc24048ff91efefcd0 /source
parent94496ca80f22ffbbc72b5ff0ec8af1e5f04a4db0 (diff)
- fixed another oldie... displaylists for MBall was generated FAR too often.
even for each redraw! Now its all smooth & fast again. introduced new kernel API call: int is_basis_mball(ob), this provides a quick check of the object is the actual basis for the displaylist and polygonization.
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/BKE_mball.h1
-rw-r--r--source/blender/blenkernel/intern/displist.c3
-rw-r--r--source/blender/blenkernel/intern/mball.c9
-rw-r--r--source/blender/src/drawobject.c37
4 files changed, 32 insertions, 18 deletions
diff --git a/source/blender/blenkernel/BKE_mball.h b/source/blender/blenkernel/BKE_mball.h
index b722e84a550..4bb49828553 100644
--- a/source/blender/blenkernel/BKE_mball.h
+++ b/source/blender/blenkernel/BKE_mball.h
@@ -52,6 +52,7 @@ void make_local_mball(struct MetaBall *mb);
void tex_space_mball( struct Object *ob);
void make_orco_mball( struct Object *ob);
struct Object *find_basis_mball( struct Object *ob);
+int is_basis_mball(struct Object *ob);
void metaball_polygonize(struct Object *ob);
void calc_mballco(struct MetaElem *ml, float *vec);
float densfunc(struct MetaElem *ball, float x, float y, float z);
diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c
index 70eb7ad7430..3a42d708f28 100644
--- a/source/blender/blenkernel/intern/displist.c
+++ b/source/blender/blenkernel/intern/displist.c
@@ -1488,8 +1488,9 @@ void makeDispList(Object *ob)
}
}
else if(ob->type==OB_MBALL) {
- ob= find_basis_mball(ob);
+ ob= find_basis_mball(ob);
+
metaball_polygonize(ob);
tex_space_mball(ob);
diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c
index eedfa8f9667..09dfbd0d4cc 100644
--- a/source/blender/blenkernel/intern/mball.c
+++ b/source/blender/blenkernel/intern/mball.c
@@ -265,6 +265,15 @@ void make_orco_mball(Object *ob)
}
}
+int is_basis_mball(Object *ob)
+{
+ int len;
+
+ /* just a quick test */
+ len= strlen(ob->id.name);
+ if( isdigit(ob->id.name[len-1]) ) return 0;
+ return 1;
+}
Object *find_basis_mball(Object *basis)
{
diff --git a/source/blender/src/drawobject.c b/source/blender/src/drawobject.c
index aa6c9a1a858..8fa67dbded7 100644
--- a/source/blender/src/drawobject.c
+++ b/source/blender/src/drawobject.c
@@ -77,6 +77,7 @@
#include "BKE_global.h"
#include "BKE_displist.h"
#include "BKE_material.h"
+#include "BKE_mball.h"
#include "BKE_ipo.h"
#include "BKE_mesh.h"
#include "BKE_effect.h"
@@ -2195,25 +2196,27 @@ static void drawDispList(Object *ob, int dt)
}
break;
case OB_MBALL:
-
- lb= &ob->disp;
- if(lb->first==0) makeDispList(ob);
-
- if(solid) {
-
- if(dt==OB_SHADED) {
- dl= lb->first;
- if(dl && dl->col1==0) shadeDispList(ob);
- drawDispListshaded(lb, ob);
- }
- else {
- init_gl_materials(ob);
- two_sided(0);
-
- drawDispListsolid(lb, ob);
+
+ if( is_basis_mball(ob)) {
+ lb= &ob->disp;
+ if(lb->first==0) makeDispList(ob);
+
+ if(solid) {
+
+ if(dt==OB_SHADED) {
+ dl= lb->first;
+ if(dl && dl->col1==0) shadeDispList(ob);
+ drawDispListshaded(lb, ob);
+ }
+ else {
+ init_gl_materials(ob);
+ two_sided(0);
+
+ drawDispListsolid(lb, ob);
+ }
}
+ else drawDispListwire(lb);
}
- else drawDispListwire(lb);
break;
}