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:
authorNicholas Bishop <nicholasbishop@gmail.com>2007-06-11 03:01:23 +0400
committerNicholas Bishop <nicholasbishop@gmail.com>2007-06-11 03:01:23 +0400
commit52d6635528a703235f61dd66689c83533b8ece52 (patch)
tree38bc7b6b54367f765bd2406ebbac8581028cd37b /source/blender/src/multires.c
parent2494a5ed0d78d06fb2efeabaa5fae3f2f1fc4797 (diff)
== Multires ==
* Removed two unused structs from multires * Replaced one-line get_float function with a macro * During add_level, move the freeing of temp data to after the update_level, so that this data isn't calculated twice
Diffstat (limited to 'source/blender/src/multires.c')
-rw-r--r--source/blender/src/multires.c32
1 files changed, 12 insertions, 20 deletions
diff --git a/source/blender/src/multires.c b/source/blender/src/multires.c
index f76c117a7f7..78906065178 100644
--- a/source/blender/src/multires.c
+++ b/source/blender/src/multires.c
@@ -151,15 +151,6 @@ short multires_vert_is_boundary(MultiresLevel *lvl, unsigned v)
return 0;
}
-typedef struct FloatNode {
- struct FloatNode *next, *prev;
- float value;
-} FloatNode;
-typedef struct FloatArrayNode {
- struct FloatArrayNode *next, *prev;
- float *value;
-} FloatArrayNode;
-
typedef struct MultiApplyData {
/* Smooth faces */
float *corner1, *corner2, *corner3, *corner4;
@@ -226,10 +217,7 @@ void multi_apply(float *out, MultiApplyData *data,
out[i]= func(data,i);
}
-float get_float(void *array, const unsigned i, const unsigned j, const char stride)
-{
- return ((float*)((char*)array+(i*stride)))[j];
-}
+#define GET_FLOAT(array, i, j, stride) (((float*)((char*)(array)+((i)*(stride))))[(j)])
void edge_face_neighbor_midpoints_accum(MultiApplyData *data, MultiresLevel *lvl,
void *array, const char stride, const MultiresEdge *e)
@@ -246,7 +234,7 @@ void edge_face_neighbor_midpoints_accum(MultiApplyData *data, MultiresLevel *lvl
for(n2= neighbors2->first; n2; n2= n2->next) {
if(n1->Index == n2->Index) {
for(j=0; j<3; ++j)
- out[j]+= get_float(array,lvl->faces[n1->Index].mid,j,stride);
+ out[j]+= GET_FLOAT(array,lvl->faces[n1->Index].mid,j,stride);
++count;
}
}
@@ -266,7 +254,7 @@ void vert_face_neighbor_midpoints_average(MultiApplyData *data, MultiresLevel *l
for(n1= neighbors->first; n1; n1= n1->next) {
for(j=0; j<3; ++j)
- out[j]+= get_float(array,lvl->faces[n1->Index].mid,j,stride);
+ out[j]+= GET_FLOAT(array,lvl->faces[n1->Index].mid,j,stride);
++count;
}
for(j=0; j<3; ++j) out[j]/= count;
@@ -283,8 +271,8 @@ void vert_edge_neighbor_midpoints_average(MultiApplyData *data, MultiresLevel *l
for(n1= neighbors->first; n1; n1= n1->next) {
for(j=0; j<3; ++j)
- out[j]+= (get_float(array,lvl->edges[n1->Index].v[0],j,stride) +
- get_float(array,lvl->edges[n1->Index].v[1],j,stride)) / 2;
+ out[j]+= (GET_FLOAT(array,lvl->edges[n1->Index].v[0],j,stride) +
+ GET_FLOAT(array,lvl->edges[n1->Index].v[1],j,stride)) / 2;
++count;
}
for(j=0; j<3; ++j) out[j]/= count;
@@ -305,7 +293,7 @@ void boundary_edges_average(MultiApplyData *data, MultiresLevel *lvl,
if(lvl->edge_boundary_states[n1->Index]) {
for(j=0; j<3; ++j)
- out[j]+= get_float(array,end,j,stride);
+ out[j]+= GET_FLOAT(array,end,j,stride);
++count;
}
}
@@ -965,7 +953,6 @@ void multires_add_level(void *ob, void *me_v)
}
}
- multires_free_temp_data(lvl->prev);
MEM_freeN(oldverts);
/* Vertex Colors
@@ -997,6 +984,8 @@ void multires_add_level(void *ob, void *me_v)
}
multires_update_levels(me, 0);
+ multires_free_temp_data(lvl->prev);
+
me->mr->newlvl= me->mr->level_count;
me->mr->current= me->mr->newlvl;
/* Unless the render level has been set to something other than the
@@ -1375,7 +1364,7 @@ void multires_update_vertices(Mesh *me, EditMesh *em)
pr_lvl= BLI_findlink(&me->mr->levels,me->mr->current-1);
cr_lvl= pr_lvl->next;
while(cr_lvl) {
- multires_calc_temp_data(pr_lvl);
+ multires_calc_temp_data(pr_lvl);
/* Swap the old/new deltas */
swap_deltas= pr_deltas;
@@ -1560,6 +1549,9 @@ void multires_calc_temp_data(MultiresLevel *lvl)
unsigned i, j, emax;
MultiresMapNode *indexnode= NULL;
+ if(lvl->map_mem)
+ return;
+
lvl->map_mem= MEM_mallocN(sizeof(MultiresMapNode)*(lvl->totedge*2 + lvl->totface*4), "map_mem");
indexnode= lvl->map_mem;