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:
authorJoseph Eagar <joeedh@gmail.com>2011-03-31 04:52:12 +0400
committerJoseph Eagar <joeedh@gmail.com>2011-03-31 04:52:12 +0400
commit90fa130a696afd50676aa50578e0563a02493884 (patch)
tree2c4fd3534f9e6286a210f2ee24f8e313cd458fda /source/blender/blenkernel/intern/multires.c
parent7d465aa82da599a24a3dfe50d44d8d53ca1af935 (diff)
=bmesh= various bugfixes
Diffstat (limited to 'source/blender/blenkernel/intern/multires.c')
-rw-r--r--source/blender/blenkernel/intern/multires.c79
1 files changed, 14 insertions, 65 deletions
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index 5714ec2f66d..fc1b43e882e 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -179,7 +179,7 @@ void multires_force_external_reload(Object *ob)
{
Mesh *me = get_mesh(ob);
- CustomData_external_reload(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface);
+ CustomData_external_reload(&me->ldata, &me->id, CD_MASK_MDISPS, me->totloop);
multires_force_update(ob);
}
@@ -258,7 +258,7 @@ static int get_levels_from_disps(Object *ob)
MDisps *mdisp, *md;
int i, j, totlvl= 0;
- mdisp = CustomData_get_layer(&me->fdata, CD_MDISPS);
+ mdisp = CustomData_get_layer(&me->ldata, CD_MDISPS);
for(i = 0; i < me->totpoly; ++i) {
int S = me->mpoly[i].totloop;
@@ -441,7 +441,7 @@ void multiresModifier_del_levels(MultiresModifierData *mmd, Object *ob, int dire
MDisps *mdisps;
multires_set_tot_mdisps(me, mmd->totlvl);
- CustomData_external_read(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface);
+ CustomData_external_read(&me->ldata, &me->id, CD_MASK_MDISPS, me->totloop);
mdisps= CustomData_get_layer(&me->ldata, CD_MDISPS);
multires_force_update(ob);
@@ -1749,8 +1749,8 @@ static void multires_sync_levels(Scene *scene, Object *ob, Object *to_ob)
Mesh *me= (Mesh*)ob->data;
- CustomData_external_remove(&me->fdata, &me->id, CD_MDISPS, me->totface);
- CustomData_free_layer_active(&me->fdata, CD_MDISPS, me->totface);
+ CustomData_external_remove(&me->ldata, &me->id, CD_MDISPS, me->totloop);
+ CustomData_free_layer_active(&me->ldata, CD_MDISPS, me->totloop);
}
if(!mmd || !to_mmd) return;
@@ -1764,7 +1764,8 @@ static void multires_apply_smat(Scene *scene, Object *ob, float smat[3][3])
DerivedMesh *dm= NULL, *cddm= NULL, *subdm= NULL;
DMGridData **gridData, **subGridData;
Mesh *me= (Mesh*)ob->data;
- MFace *mface= me->mface;
+ MPoly *mpoly= me->mpoly;
+ MLoop *mloop = me->mloop;
MDisps *mdisps;
int *gridOffset;
int i, /*numGrids,*/ gridSize, dGridSize, dSkip, totvert;
@@ -1772,8 +1773,8 @@ static void multires_apply_smat(Scene *scene, Object *ob, float smat[3][3])
MultiresModifierData *mmd= get_multires_modifier(scene, ob, 1);
MultiresModifierData high_mmd;
- CustomData_external_read(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface);
- mdisps= CustomData_get_layer(&me->fdata, CD_MDISPS);
+ CustomData_external_read(&me->ldata, &me->id, CD_MASK_MDISPS, me->totloop);
+ mdisps= CustomData_get_layer(&me->ldata, CD_MDISPS);
if(!mdisps || !mmd) return;
@@ -1809,15 +1810,15 @@ static void multires_apply_smat(Scene *scene, Object *ob, float smat[3][3])
dSkip= (dGridSize-1)/(gridSize-1);
#pragma omp parallel for private(i) if(me->totface*gridSize*gridSize*4 >= CCG_OMP_LIMIT)
- for(i = 0; i < me->totface; ++i) {
- const int numVerts= mface[i].v4 ? 4 : 3;
- MDisps *mdisp= &mdisps[i];
+ for(i = 0; i < me->totpoly; ++i) {
+ const int numVerts= mpoly[i].totloop;
+ MDisps *mdisp= &mdisps[mpoly[i].loopstart];
int S, x, y, gIndex = gridOffset[i];
- for(S = 0; S < numVerts; ++S, ++gIndex) {
+ for(S = 0; S < numVerts; ++S, ++gIndex, mdisp++) {
DMGridData *grid= gridData[gIndex];
DMGridData *subgrid= subGridData[gIndex];
- float (*dispgrid)[3]= &mdisp->disps[S*dGridSize*dGridSize];
+ float (*dispgrid)[3]= mdisp->disps;
for(y = 0; y < gridSize; y++) {
for(x = 0; x < gridSize; x++) {
@@ -1889,58 +1890,6 @@ void multiresModifier_prepare_join(Scene *scene, Object *ob, Object *to_ob)
multires_apply_smat(scene, ob, mat);
}
-/* update multires data after topology changing */
-void multires_topology_changed(Scene *scene, Object *ob)
-{
- Mesh *me= (Mesh*)ob->data;
- MDisps *mdisp= NULL, *cur= NULL;
- int i, grid= 0, corners;
- MultiresModifierData *mmd= get_multires_modifier(scene, ob, 1);
-
- if(mmd)
- multires_set_tot_mdisps(me, mmd->totlvl);
-
- CustomData_external_read(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface);
- mdisp= CustomData_get_layer(&me->fdata, CD_MDISPS);
-
- if(!mdisp) return;
-
- cur= mdisp;
- for(i = 0; i < me->totface; i++, cur++) {
- if(mdisp->totdisp) {
- corners= multires_mdisp_corners(mdisp);
- grid= mdisp->totdisp / corners;
-
- break;
- }
- }
-
- for(i = 0; i < me->totface; i++, mdisp++) {
- int nvert= me->mface[i].v4 ? 4 : 3;
-
- /* allocate memory for mdisp, the whole disp layer would be erased otherwise */
- if(!mdisp->totdisp) {
- if(grid) {
- mdisp->totdisp= nvert*grid;
- mdisp->disps= BLI_cellalloc_calloc(mdisp->totdisp*sizeof(float)*3, "mdisp topology");
- }
-
- continue;
- }
-
- corners= multires_mdisp_corners(mdisp);
-
- if(corners!=nvert) {
- mdisp->totdisp= (mdisp->totdisp/corners)*nvert;
-
- if(mdisp->disps)
- BLI_cellalloc_free(mdisp->disps);
-
- mdisp->disps= BLI_cellalloc_calloc(mdisp->totdisp*sizeof(float)*3, "mdisp topology");
- }
- }
-}
-
/* makes displacement along grid boundary symmetrical */
void multires_mdisp_smooth_bounds(MDisps *disps)
{