[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15746] branches/soc-2008-nicholasbishop/ source/blender/blenkernel: Removed some unneeded data copies made in MultiresDM.
Nicholas Bishop
nicholasbishop at gmail.com
Fri Jul 25 00:49:30 CEST 2008
Revision: 15746
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15746
Author: nicholasbishop
Date: 2008-07-25 00:49:29 +0200 (Fri, 25 Jul 2008)
Log Message:
-----------
Removed some unneeded data copies made in MultiresDM.
Modified Paths:
--------------
branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h
branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_subsurf.h
branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/cdderivedmesh.c
branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c
branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/subsurf_ccg.c
Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h 2008-07-24 21:50:54 UTC (rev 15745)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h 2008-07-24 22:49:29 UTC (rev 15746)
@@ -72,6 +72,11 @@
struct MFace;
struct MEdge;
+typedef struct MultiresSubsurf {
+ struct Mesh *me;
+ int totlvl, lvl;
+} MultiresSubsurf;
+
typedef struct IndexNode {
struct IndexNode *next, *prev;
int index;
@@ -81,13 +86,11 @@
const int totvert, const int totface);
/* MultiresDM */
-void MultiresDM_set_mesh(struct DerivedMesh *dm, struct Mesh *me);
struct Mesh *MultiresDM_get_mesh(struct DerivedMesh *dm);
-struct DerivedMesh *MultiresDM_new(struct DerivedMesh*, int, int, int, int, int);
+struct DerivedMesh *MultiresDM_new(struct MultiresSubsurf *, struct DerivedMesh*, int, int, int);
void *MultiresDM_get_vertnorm(struct DerivedMesh *);
void *MultiresDM_get_orco(struct DerivedMesh *);
void *MultiresDM_get_subco(struct DerivedMesh *);
-struct MFace *MultiresDM_get_orfa(struct DerivedMesh *);
struct ListBase *MultiresDM_get_vert_face_map(struct DerivedMesh *);
int MultiresDM_get_totlvl(struct DerivedMesh *);
int MultiresDM_get_lvl(struct DerivedMesh *);
Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_subsurf.h
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_subsurf.h 2008-07-24 21:50:54 UTC (rev 15745)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_subsurf.h 2008-07-24 22:49:29 UTC (rev 15746)
@@ -32,7 +32,7 @@
struct Object;
struct DerivedMesh;
struct EditMesh;
-struct MultiresModifierData;
+struct MultiresSubsurf;
struct SubsurfModifierData;
struct DerivedMesh *subsurf_make_derived_from_derived(
@@ -44,7 +44,7 @@
struct DerivedMesh *subsurf_make_derived_from_derived_with_multires(
struct DerivedMesh *dm,
struct SubsurfModifierData *smd,
- struct MultiresModifierData *mmd,
+ struct MultiresSubsurf *ms,
int useRenderParams, float (*vertCos)[3],
int isFinalCalc, int editMode);
Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/cdderivedmesh.c 2008-07-24 21:50:54 UTC (rev 15745)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/cdderivedmesh.c 2008-07-24 22:49:29 UTC (rev 15746)
@@ -1158,9 +1158,6 @@
int lvl, totlvl;
float (*orco)[3];
float (*subco)[3];
- MFace *orfa;
- int totorco;
- int totorfa;
float (*norm)[3];
@@ -1182,7 +1179,6 @@
mrdm->update(dm);
if(DM_release(dm)) {
- MEM_freeN(mrdm->orfa);
MEM_freeN(mrdm->subco);
MEM_freeN(mrdm->orco);
MEM_freeN(mrdm->norm);
@@ -1199,10 +1195,10 @@
float (*v)[3] = mrdm->orco;
int i;
- mrdm->norm = MEM_callocN(sizeof(float)*3 * mrdm->totorco, "MultiresDM vertnorms");
+ mrdm->norm = MEM_callocN(sizeof(float)*3 * mrdm->me->totvert, "MultiresDM vertnorms");
- for(i = 0; i < mrdm->totorfa; ++i) {
- MFace *f = &mrdm->orfa[i];
+ for(i = 0; i < mrdm->me->totface; ++i) {
+ MFace *f = &mrdm->me->mface[i];
float n[3];
if(f->v4)
CalcNormFloat4(v[f->v1], v[f->v2], v[f->v3], v[f->v4], n);
@@ -1216,11 +1212,11 @@
VecAddf(mrdm->norm[f->v4], mrdm->norm[f->v4], n);
}
- for(i = 0; i < mrdm->totorco; ++i)
+ for(i = 0; i < mrdm->me->totvert; ++i)
Normalize(mrdm->norm[i]);
}
-DerivedMesh *MultiresDM_new(DerivedMesh *orig, int numVerts, int numEdges, int numFaces, int lvl, int totlvl)
+DerivedMesh *MultiresDM_new(MultiresSubsurf *ms, DerivedMesh *orig, int numVerts, int numEdges, int numFaces)
{
MultiresDM *mrdm = MEM_callocN(sizeof(MultiresDM), "MultiresDM");
CDDerivedMesh *cddm = cdDM_create("MultiresDM CDDM");
@@ -1230,6 +1226,8 @@
MEM_freeN(cddm);
dm = &mrdm->cddm.dm;
+ mrdm->me = ms->me;
+
if(dm) {
MDisps *disps;
MVert *mvert;
@@ -1247,9 +1245,7 @@
mrdm->orco = MEM_callocN(sizeof(float) * 3 * orig->getNumVerts(orig), "multires orco");
for(i = 0; i < orig->getNumVerts(orig); ++i)
VecCopyf(mrdm->orco[i], mvert[i].co);
- mrdm->totorco = orig->getNumVerts(orig);
- mrdm->orfa = MEM_dupallocN(CustomData_get_layer(&orig->faceData, CD_MFACE));
- mrdm->totorfa = orig->getNumFaces(orig);
+ mrdm->me->totvert = orig->getNumVerts(orig);
}
else
DM_init(dm, numVerts, numEdges, numFaces);
@@ -1262,8 +1258,8 @@
mrdm->cddm.medge = CustomData_get_layer(&dm->edgeData, CD_MEDGE);
mrdm->cddm.mface = CustomData_get_layer(&dm->faceData, CD_MFACE);
- mrdm->lvl = lvl;
- mrdm->totlvl = totlvl;
+ mrdm->lvl = ms->lvl;
+ mrdm->totlvl = ms->totlvl;
mrdm->subco = MEM_callocN(sizeof(float)*3*numVerts, "multires subdivided coords");
mrdm->block_update = 0;
@@ -1274,11 +1270,6 @@
return dm;
}
-void MultiresDM_set_mesh(DerivedMesh *dm, Mesh *me)
-{
- ((MultiresDM*)dm)->me = me;
-}
-
Mesh *MultiresDM_get_mesh(DerivedMesh *dm)
{
return ((MultiresDM*)dm)->me;
@@ -1300,11 +1291,6 @@
return ((MultiresDM*)dm)->subco;
}
-MFace *MultiresDM_get_orfa(DerivedMesh *dm)
-{
- return ((MultiresDM*)dm)->orfa;
-}
-
int MultiresDM_get_totlvl(DerivedMesh *dm)
{
return ((MultiresDM*)dm)->totlvl;
@@ -1330,8 +1316,8 @@
MultiresDM *mrdm = (MultiresDM*)dm;
if(!mrdm->vert_face_map)
- create_vert_face_map(&mrdm->vert_face_map, &mrdm->vert_face_map_mem, mrdm->orfa,
- mrdm->totorco, mrdm->totorfa);
+ create_vert_face_map(&mrdm->vert_face_map, &mrdm->vert_face_map_mem, mrdm->me->mface,
+ mrdm->me->totvert, mrdm->me->totface);
return mrdm->vert_face_map;
}
Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c 2008-07-24 21:50:54 UTC (rev 15745)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c 2008-07-24 22:49:29 UTC (rev 15746)
@@ -1227,7 +1227,7 @@
{
float inv[3][3];
- d->face = MultiresDM_get_orfa(dm) + face_index;
+ d->face = MultiresDM_get_mesh(dm)->mface + face_index;
/* Get the multires grid from customdata and calculate the TS matrix */
d->grid = (MDisps*)dm->getFaceDataArray(dm, CD_MDISPS);
if(d->grid)
@@ -1600,14 +1600,14 @@
int useRenderParams, int isFinalCalc)
{
SubsurfModifierData smd;
+ MultiresSubsurf ms = {me, mmd->totlvl, mmd->lvl};
DerivedMesh *result;
memset(&smd, 0, sizeof(SubsurfModifierData));
smd.levels = smd.renderLevels = mmd->lvl - 1;
- result = subsurf_make_derived_from_derived_with_multires(dm, &smd, mmd, useRenderParams, NULL, isFinalCalc, 0);
+ result = subsurf_make_derived_from_derived_with_multires(dm, &smd, &ms, useRenderParams, NULL, isFinalCalc, 0);
MultiresDM_set_update(result, multiresModifier_update);
- MultiresDM_set_mesh(result, me);
return result;
}
Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/subsurf_ccg.c 2008-07-24 21:50:54 UTC (rev 15745)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/subsurf_ccg.c 2008-07-24 22:49:29 UTC (rev 15746)
@@ -471,7 +471,7 @@
DerivedMesh *ss_to_cdderivedmesh(CCGSubSurf *ss, int ssFromEditmesh,
int drawInteriorEdges, int useSubsurfUv,
- DerivedMesh *dm, MultiresModifierData *mmd)
+ DerivedMesh *dm, MultiresSubsurf *ms)
{
DerivedMesh *result;
int edgeSize = ccgSubSurf_getEdgeSize(ss);
@@ -527,10 +527,10 @@
}
ccgFaceIterator_free(fi);
- if(mmd) {
- result = MultiresDM_new(dm, ccgSubSurf_getNumFinalVerts(ss),
+ if(ms) {
+ result = MultiresDM_new(ms, dm, ccgSubSurf_getNumFinalVerts(ss),
ccgSubSurf_getNumFinalEdges(ss),
- ccgSubSurf_getNumFinalFaces(ss), mmd->lvl, mmd->totlvl);
+ ccgSubSurf_getNumFinalFaces(ss));
mr_orig = MultiresDM_get_subco(result);
}
else {
@@ -564,7 +564,7 @@
DM_interp_vert_data(dm, result, vertIdx, weight[0][0], numVerts, i);
VecCopyf(mvert->co, ccgSubSurf_getFaceCenterData(ss, f));
- if(mmd) {
+ if(ms) {
VecCopyf(mr_orig, mvert->co);
mr_orig += 3;
multires_displacer_init(&d, result, index, 0);
@@ -581,7 +581,7 @@
int nextS = (S + 1) % numVerts;
int otherS = (numVerts == 4) ? (S + 2) % numVerts : 3;
- if(mmd) multires_displacer_anchor(&d, 2, S);
+ if(ms) multires_displacer_anchor(&d, 2, S);
for(x = 1; x < gridFaces; x++) {
float w[4];
w[prevS] = weight[x][0][0];
@@ -591,7 +591,7 @@
DM_interp_vert_data(dm, result, vertIdx, w, numVerts, i);
VecCopyf(mvert->co,
ccgSubSurf_getFaceGridEdgeData(ss, f, S, x));
- if(mmd) {
+ if(ms) {
VecCopyf(mr_orig, mvert->co);
mr_orig += 3;
multires_displace(&d, mvert->co);
@@ -608,7 +608,7 @@
int nextS = (S + 1) % numVerts;
int otherS = (numVerts == 4) ? (S + 2) % numVerts : 3;
- if(mmd) multires_displacer_anchor(&d, 3, S);
+ if(ms) multires_displacer_anchor(&d, 3, S);
for(y = 1; y < gridFaces; y++) {
for(x = 1; x < gridFaces; x++) {
float w[4];
@@ -619,7 +619,7 @@
DM_interp_vert_data(dm, result, vertIdx, w, numVerts, i);
VecCopyf(mvert->co,
ccgSubSurf_getFaceGridData(ss, f, S, x, y));
- if(mmd) {
+ if(ms) {
VecCopyf(mr_orig, mvert->co);
mr_orig += 3;
multires_displace(&d, mvert->co);
@@ -630,7 +630,7 @@
++origIndex;
i++;
}
- if(mmd) multires_displacer_jump(&d);
+ if(ms) multires_displacer_jump(&d);
}
}
@@ -656,7 +656,7 @@
w[0] = 1 - w[1];
DM_interp_vert_data(dm, result, vertIdx, w, 2, i);
VecCopyf(mvert->co, ccgSubSurf_getEdgeData(ss, e, x));
- if(mmd) {
+ if(ms) {
int numFaces = ccgSubSurf_getEdgeNumFaces(ss, e);
int edgeface;
@@ -693,7 +693,7 @@
DM_copy_vert_data(dm, result, vertIdx, i, 1);
VecCopyf(mvert->co, ccgSubSurf_getVertData(ss, v));
- if(mmd) {
+ if(ms) {
int numFaces = ccgSubSurf_getVertNumFaces(ss, v);
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list