[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44447] trunk/blender/source/blender/ blenkernel/intern/multires.c: Code cleanup: clarify multiresModifier_disp_run modes.
Nicholas Bishop
nicholasbishop at gmail.com
Sun Feb 26 05:40:57 CET 2012
Revision: 44447
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44447
Author: nicholasbishop
Date: 2012-02-26 04:40:56 +0000 (Sun, 26 Feb 2012)
Log Message:
-----------
Code cleanup: clarify multiresModifier_disp_run modes.
Previously the function took 'invert' and 'add' parameters to indicate
what operation should be performed on the displacements, replaced
these with three named modes: APPLY_DISPLACEMENTS, CALC_DISPLACEMENTS,
and ADD_DISPLACEMENTS.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/multires.c
Modified: trunk/blender/source/blender/blenkernel/intern/multires.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/multires.c 2012-02-26 04:38:37 UTC (rev 44446)
+++ trunk/blender/source/blender/blenkernel/intern/multires.c 2012-02-26 04:40:56 UTC (rev 44447)
@@ -66,8 +66,15 @@
static const int multires_grid_tot[] = {0, 4, 9, 25, 81, 289, 1089, 4225, 16641, 66049, 263169, 1050625, 4198401, 16785409};
static const int multires_side_tot[] = {0, 2, 3, 5, 9, 17, 33, 65, 129, 257, 513, 1025, 2049, 4097};
+/* See multiresModifier_disp_run for description of each operation */
+typedef enum {
+ APPLY_DISPLACEMENTS,
+ CALC_DISPLACEMENTS,
+ ADD_DISPLACEMENTS,
+} DispOp;
+
static void multires_mvert_to_ss(DerivedMesh *dm, MVert *mvert);
-static void multiresModifier_disp_run(DerivedMesh *dm, Mesh *me, DerivedMesh *dm2, int invert, int add, DMGridData **oldGridData, int totlvl);
+static void multiresModifier_disp_run(DerivedMesh *dm, Mesh *me, DerivedMesh *dm2, DispOp op, DMGridData **oldGridData, int totlvl);
DerivedMesh *get_multires_dm(Scene *scene, MultiresModifierData *mmd, Object *ob)
{
@@ -597,7 +604,7 @@
cddm->release(cddm);
/* calc disps */
- multiresModifier_disp_run(dispdm, me, NULL, 1, 0, origdm->getGridData(origdm), totlvl);
+ multiresModifier_disp_run(dispdm, me, NULL, CALC_DISPLACEMENTS, origdm->getGridData(origdm), totlvl);
origdm->release(origdm);
dispdm->release(dispdm);
@@ -664,7 +671,7 @@
multires_reallocate_mdisps(me->totloop, mdisps, totlvl);
/* compute displacements */
- multiresModifier_disp_run(highdm, me, NULL, 1, 0, subGridData, totlvl);
+ multiresModifier_disp_run(highdm, me, NULL, CALC_DISPLACEMENTS, subGridData, totlvl);
/* free */
highdm->release(highdm);
@@ -709,7 +716,7 @@
}
}
-static void multiresModifier_disp_run(DerivedMesh *dm, Mesh *me, DerivedMesh *dm2, int invert, int add, DMGridData **oldGridData, int totlvl)
+static void multiresModifier_disp_run(DerivedMesh *dm, Mesh *me, DerivedMesh *dm2, DispOp op, DMGridData **oldGridData, int totlvl)
{
CCGDerivedMesh *ccgdm = (CCGDerivedMesh*)dm;
DMGridData **gridData, **subGridData;
@@ -732,7 +739,7 @@
}
if (!mdisps) {
- if (invert)
+ if (op == CALC_DISPLACEMENTS)
mdisps = CustomData_add_layer(&me->ldata, CD_MDISPS, CD_DEFAULT, NULL, me->totloop);
else
return;
@@ -791,29 +798,34 @@
column_vectors_to_mat3(mat, tx, ty, no);
- if (!invert) {
- /* convert to object space and add */
+ switch(op) {
+ case APPLY_DISPLACEMENTS:
+ /* Convert displacement to object space
+ and add to grid points */
mul_v3_m3v3(disp, mat, data);
add_v3_v3v3(co, sco, disp);
- }
- else if (!add) {
- /* convert difference to tangent space */
+ break;
+ case CALC_DISPLACEMENTS:
+ /* Calculate displacement between new and old
+ grid points and convert to tangent space */
sub_v3_v3v3(disp, co, sco);
invert_m3(mat);
mul_v3_m3v3(data, mat, disp);
- }
- else {
- /* convert difference to tangent space */
+ break;
+ case ADD_DISPLACEMENTS:
+ /* Convert subdivided displacements to tangent
+ space and add to the original displacements */
invert_m3(mat);
mul_v3_m3v3(d, mat, co);
add_v3_v3(data, d);
+ break;
}
}
}
}
}
- if (!invert) {
+ if (op == APPLY_DISPLACEMENTS) {
ccgSubSurf_stitchFaces(ccgdm->ss, 0, NULL, 0);
ccgSubSurf_updateNormals(ccgdm->ss, NULL, 0);
}
@@ -889,7 +901,7 @@
ccgSubSurf_updateLevels(ss, lvl, NULL, 0);
/* add to displacements */
- multiresModifier_disp_run(highdm, me, NULL, 1, 1, subGridData, mmd->totlvl);
+ multiresModifier_disp_run(highdm, me, NULL, ADD_DISPLACEMENTS, subGridData, mmd->totlvl);
/* free */
highdm->release(highdm);
@@ -907,7 +919,7 @@
subdm = subsurf_dm_create_local(ob, cddm, mmd->totlvl, mmd->simple, 0, mmd->flags & eMultiresModifierFlag_PlainUv);
cddm->release(cddm);
- multiresModifier_disp_run(dm, me, NULL, 1, 0, subdm->getGridData(subdm), mmd->totlvl);
+ multiresModifier_disp_run(dm, me, NULL, CALC_DISPLACEMENTS, subdm->getGridData(subdm), mmd->totlvl);
subdm->release(subdm);
}
@@ -1104,7 +1116,7 @@
CustomData_external_read(&me->ldata, &me->id, CD_MASK_MDISPS, me->totloop);
/*run displacement*/
- multiresModifier_disp_run(result, ob->data, dm, 0, 0, subGridData, mmd->totlvl);
+ multiresModifier_disp_run(result, ob->data, dm, APPLY_DISPLACEMENTS, subGridData, mmd->totlvl);
for (i = 0; i < numGrids; i++)
MEM_freeN(subGridData[i]);
More information about the Bf-blender-cvs
mailing list