[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37123] branches/soc-2011-onion: Revision: 29261
Jason Wilkins
Jason.A.Wilkins at gmail.com
Fri Jun 3 15:53:28 CEST 2011
Revision: 37123
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37123
Author: jwilkins
Date: 2011-06-03 13:53:28 +0000 (Fri, 03 Jun 2011)
Log Message:
-----------
Revision: 29261
Author: nicholasbishop
Date: 1:10:54 AM, Sunday, June 06, 2010
Message:
* Changed CCGSubSurf's Vert macros into functions that operate on any number of floats, rather than just three.
* Added a new field to CCGMeshIFC to control how many floats those functions will operate on.
* For now it's always three, so there should be no visible change in behavior.
Revision: 29324
Author: nicholasbishop
Date: 5:57:54 PM, Monday, June 07, 2010
Message:
* Replaced bad usage of inline keyword with CCG_INLINE.
Modified Paths:
--------------
branches/soc-2011-onion/source/blender/blenkernel/intern/CCGSubSurf.c
branches/soc-2011-onion/source/blender/blenkernel/intern/CCGSubSurf.h
branches/soc-2011-onion/source/blender/blenkernel/intern/subsurf_ccg.c
Property Changed:
----------------
branches/soc-2011-onion/
Property changes on: branches/soc-2011-onion
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/soc-2010-jwilkins:28499-37009
/branches/soc-2010-nicolasbishop:28448-29094,29263,29350
/trunk/blender:36833-37054
+ /branches/soc-2010-jwilkins:28499-37009
/branches/soc-2010-nicolasbishop:28448-29261,29263,29324,29350
/trunk/blender:36833-37054
Modified: branches/soc-2011-onion/source/blender/blenkernel/intern/CCGSubSurf.c
===================================================================
--- branches/soc-2011-onion/source/blender/blenkernel/intern/CCGSubSurf.c 2011-06-03 13:34:02 UTC (rev 37122)
+++ branches/soc-2011-onion/source/blender/blenkernel/intern/CCGSubSurf.c 2011-06-03 13:53:28 UTC (rev 37123)
@@ -221,6 +221,8 @@
static int VertDataEqual(float *a, float *b) {
return a[0]==b[0] && a[1]==b[1] && a[2]==b[2];
}
+
+#if 0
#define VertDataZero(av) { float *_a = (float*) av; _a[0] = _a[1] = _a[2] = 0.0f; }
#define VertDataCopy(av, bv) { float *_a = (float*) av, *_b = (float*) bv; _a[0] =_b[0]; _a[1] =_b[1]; _a[2] =_b[2]; }
#define VertDataAdd(av, bv) { float *_a = (float*) av, *_b = (float*) bv; _a[0]+=_b[0]; _a[1]+=_b[1]; _a[2]+=_b[2]; }
@@ -233,6 +235,51 @@
_t[1] = (_a[1]+_b[1]+_c[1]+_d[1])*.25f; \
_t[2] = (_a[2]+_b[2]+_c[2]+_d[2])*.25f; \
}
+#else
+
+CCG_INLINE void VertDataZero(void *a, const int n)
+{
+ int i;
+ for(i = 0; i < n; ++i)
+ ((float*)a)[i] = 0;
+}
+
+CCG_INLINE void VertDataCopy(void *a, void *b, int n)
+{
+ int i;
+ for(i = 0; i < n; ++i)
+ ((float*)a)[i] = ((float*)b)[i];
+}
+
+CCG_INLINE void VertDataAdd(void *a, void *b, int n)
+{
+ int i;
+ for(i = 0; i < n; ++i)
+ ((float*)a)[i] += ((float*)b)[i];
+}
+
+CCG_INLINE void VertDataSub(void *a, void *b, int n)
+{
+ int i;
+ for(i = 0; i < n; ++i)
+ ((float*)a)[i] -= ((float*)b)[i];
+}
+
+CCG_INLINE void VertDataMulN(void *a, float b, int n)
+{
+ int i;
+ for(i = 0; i < n; ++i)
+ ((float*)a)[i] *= b;
+}
+
+CCG_INLINE void VertDataAvg4(void *t, void *a, void *b, void *c, void *d, int n)
+{
+ int i;
+ for(i = 0; i < n; ++i)
+ ((float*)t)[i] = (((float*)a)[i] + ((float*)b)[i] + ((float*)c)[i] + ((float*)d)[i]) * 0.25f;
+}
+#endif
+
#define NormZero(av) { float *_a = (float*) av; _a[0] = _a[1] = _a[2] = 0.0f; }
#define NormCopy(av, bv) { float *_a = (float*) av, *_b = (float*) bv; _a[0] =_b[0]; _a[1] =_b[1]; _a[2] =_b[2]; }
#define NormAdd(av, bv) { float *_a = (float*) av, *_b = (float*) bv; _a[0]+=_b[0]; _a[1]+=_b[1]; _a[2]+=_b[2]; }
@@ -909,13 +956,13 @@
v = _ehash_lookupWithPrev(ss->vMap, vHDL, &prevp);
if (!v) {
v = _vert_new(vHDL, ss);
- VertDataCopy(_vert_getCo(v,0,ss->meshIFC.vertDataSize), vertData);
+ VertDataCopy(_vert_getCo(v,0,ss->meshIFC.vertDataSize), vertData, ss->meshIFC.finterpCount);
_ehash_insert(ss->vMap, (EHEntry*) v);
v->flags = Vert_eEffected|seamflag;
} else if (!VertDataEqual(vertData, _vert_getCo(v, 0, ss->meshIFC.vertDataSize)) || ((v->flags & Vert_eSeam) != seamflag)) {
int i, j;
- VertDataCopy(_vert_getCo(v,0,ss->meshIFC.vertDataSize), vertData);
+ VertDataCopy(_vert_getCo(v,0,ss->meshIFC.vertDataSize), vertData, ss->meshIFC.finterpCount);
v->flags = Vert_eEffected|seamflag;
for (i=0; i<v->numEdges; i++) {
@@ -938,13 +985,13 @@
v = _ehash_lookupWithPrev(ss->oldVMap, vHDL, &prevp);
if (!v) {
v = _vert_new(vHDL, ss);
- VertDataCopy(_vert_getCo(v,0,ss->meshIFC.vertDataSize), vertData);
+ VertDataCopy(_vert_getCo(v,0,ss->meshIFC.vertDataSize), vertData, ss->meshIFC.finterpCount);
_ehash_insert(ss->vMap, (EHEntry*) v);
v->flags = Vert_eEffected|seamflag;
} else if (!VertDataEqual(vertData, _vert_getCo(v, 0, ss->meshIFC.vertDataSize)) || ((v->flags & Vert_eSeam) != seamflag)) {
*prevp = v->next;
_ehash_insert(ss->vMap, (EHEntry*) v);
- VertDataCopy(_vert_getCo(v,0,ss->meshIFC.vertDataSize), vertData);
+ VertDataCopy(_vert_getCo(v,0,ss->meshIFC.vertDataSize), vertData, ss->meshIFC.finterpCount);
v->flags = Vert_eEffected|Vert_eChanged|seamflag;
} else {
*prevp = v->next;
@@ -1323,7 +1370,7 @@
}
VertDataCopy((float*)((byte*)FACE_getCenterData(f) + normalDataOffset),
- FACE_getIFNo(f, lvl, S, 0, 0));
+ FACE_getIFNo(f, lvl, S, 0, 0), 3);
for (x=1; x<gridSize-1; x++)
NormCopy(FACE_getIENo(f, lvl, S, x),
@@ -1370,6 +1417,7 @@
int nextLvl = curLvl+1;
int ptrIdx, cornerIdx, i;
int vertDataSize = ss->meshIFC.vertDataSize;
+ int finterpCount = ss->meshIFC.finterpCount;
void *q = ss->q, *r = ss->r;
#pragma omp parallel for private(ptrIdx) if(numEffectedF*edgeSize*edgeSize*4 >= CCG_OMP_LIMIT)
@@ -1391,7 +1439,7 @@
void *co3 = FACE_getIFCo(f, curLvl, S, x+0, y+1);
void *co = FACE_getIFCo(f, nextLvl, S, fx, fy);
- VertDataAvg4(co, co0, co1, co2, co3);
+ VertDataAvg4(co, co0, co1, co2, co3, finterpCount);
}
}
}
@@ -1409,7 +1457,7 @@
void *co3 = FACE_getIFCo(f, nextLvl, S, fx, 1);
void *co = FACE_getIECo(f, nextLvl, S, fx);
- VertDataAvg4(co, co0, co1, co2, co3);
+ VertDataAvg4(co, co0, co1, co2, co3, finterpCount);
}
/* interior face interior edge midpoints
@@ -1428,7 +1476,7 @@
void *co3 = FACE_getIFCo(f, nextLvl, S, fx+1, fy);
void *co = FACE_getIFCo(f, nextLvl, S, fx, fy);
- VertDataAvg4(co, co0, co1, co2, co3);
+ VertDataAvg4(co, co0, co1, co2, co3, finterpCount);
}
}
@@ -1443,7 +1491,7 @@
void *co3 = FACE_getIFCo(f, nextLvl, S, fx, fy+1);
void *co = FACE_getIFCo(f, nextLvl, S, fx, fy);
- VertDataAvg4(co, co0, co1, co2, co3);
+ VertDataAvg4(co, co0, co1, co2, co3, finterpCount);
}
}
}
@@ -1465,9 +1513,9 @@
void *co1 = EDGE_getCo(e, curLvl, x+1);
void *co = EDGE_getCo(e, nextLvl, fx);
- VertDataCopy(co, co0);
- VertDataAdd(co, co1);
- VertDataMulN(co, 0.5f);
+ VertDataCopy(co, co0, finterpCount);
+ VertDataAdd(co, co1, finterpCount);
+ VertDataMulN(co, 0.5f, finterpCount);
}
} else {
for (x=0; x<edgeSize-1; x++) {
@@ -1477,25 +1525,25 @@
void *co = EDGE_getCo(e, nextLvl, fx);
int numFaces = 0;
- VertDataCopy(q, co0);
- VertDataAdd(q, co1);
+ VertDataCopy(q, co0, finterpCount);
+ VertDataAdd(q, co1, finterpCount);
for (j=0; j<e->numFaces; j++) {
CCGFace *f = e->faces[j];
- VertDataAdd(q, _face_getIFCoEdge(f, e, nextLvl, fx, 1, subdivLevels, vertDataSize));
+ VertDataAdd(q, _face_getIFCoEdge(f, e, nextLvl, fx, 1, subdivLevels, vertDataSize), finterpCount);
numFaces++;
}
- VertDataMulN(q, 1.0f/(2.0f+numFaces));
+ VertDataMulN(q, 1.0f/(2.0f+numFaces), finterpCount);
- VertDataCopy(r, co0);
- VertDataAdd(r, co1);
- VertDataMulN(r, 0.5f);
+ VertDataCopy(r, co0, finterpCount);
+ VertDataAdd(r, co1, finterpCount);
+ VertDataMulN(r, 0.5f, finterpCount);
- VertDataCopy(co, q);
- VertDataSub(r, q);
- VertDataMulN(r, sharpness);
- VertDataAdd(co, r);
+ VertDataCopy(co, q, finterpCount);
+ VertDataSub(r, q, finterpCount);
+ VertDataMulN(r, sharpness, finterpCount);
+ VertDataAdd(co, r, finterpCount);
}
}
}
@@ -1539,51 +1587,51 @@
seam = 0;
if (!v->numEdges) {
- VertDataCopy(nCo, co);
+ VertDataCopy(nCo, co, finterpCount);
} else if (_vert_isBoundary(v)) {
int numBoundary = 0;
- VertDataZero(r);
+ VertDataZero(r, finterpCount);
for (j=0; j<v->numEdges; j++) {
CCGEdge *e = v->edges[j];
if (_edge_isBoundary(e)) {
- VertDataAdd(r, _edge_getCoVert(e, v, curLvl, 1, vertDataSize));
+ VertDataAdd(r, _edge_getCoVert(e, v, curLvl, 1, vertDataSize), finterpCount);
numBoundary++;
}
}
- VertDataCopy(nCo, co);
- VertDataMulN(nCo, 0.75f);
- VertDataMulN(r, 0.25f/numBoundary);
- VertDataAdd(nCo, r);
+ VertDataCopy(nCo, co, finterpCount);
+ VertDataMulN(nCo, 0.75f, finterpCount);
+ VertDataMulN(r, 0.25f/numBoundary, finterpCount);
+ VertDataAdd(nCo, r, finterpCount);
} else {
int cornerIdx = (1 + (1<<(curLvl))) - 2;
int numEdges = 0, numFaces = 0;
- VertDataZero(q);
+ VertDataZero(q, finterpCount);
for (j=0; j<v->numFaces; j++) {
CCGFace *f = v->faces[j];
- VertDataAdd(q, FACE_getIFCo(f, nextLvl, _face_getVertIndex(f,v), cornerIdx, cornerIdx));
+ VertDataAdd(q, FACE_getIFCo(f, nextLvl, _face_getVertIndex(f,v), cornerIdx, cornerIdx), finterpCount);
numFaces++;
}
- VertDataMulN(q, 1.0f/numFaces);
- VertDataZero(r);
+ VertDataMulN(q, 1.0f/numFaces, finterpCount);
+ VertDataZero(r, finterpCount);
for (j=0; j<v->numEdges; j++) {
CCGEdge *e = v->edges[j];
- VertDataAdd(r, _edge_getCoVert(e, v, curLvl, 1,vertDataSize));
+ VertDataAdd(r, _edge_getCoVert(e, v, curLvl, 1,vertDataSize), finterpCount);
numEdges++;
}
- VertDataMulN(r, 1.0f/numEdges);
+ VertDataMulN(r, 1.0f/numEdges, finterpCount);
- VertDataCopy(nCo, co);
- VertDataMulN(nCo, numEdges-2.0f);
- VertDataAdd(nCo, q);
- VertDataAdd(nCo, r);
- VertDataMulN(nCo, 1.0f/numEdges);
+ VertDataCopy(nCo, co, finterpCount);
+ VertDataMulN(nCo, numEdges-2.0f, finterpCount);
+ VertDataAdd(nCo, q, finterpCount);
+ VertDataAdd(nCo, r, finterpCount);
+ VertDataMulN(nCo, 1.0f/numEdges, finterpCount);
}
if ((sharpCount>1 && v->numFaces) || seam) {
- VertDataZero(q);
+ VertDataZero(q, finterpCount);
if (seam) {
avgSharpness = 1.0f;
@@ -1597,32 +1645,32 @@
if (seam) {
if (_edge_isBoundary(e))
- VertDataAdd(q, _edge_getCoVert(e, v, curLvl, 1, vertDataSize));
+ VertDataAdd(q, _edge_getCoVert(e, v, curLvl, 1, vertDataSize), finterpCount);
} else if (sharpness != 0.0f) {
- VertDataAdd(q, _edge_getCoVert(e, v, curLvl, 1, vertDataSize));
+ VertDataAdd(q, _edge_getCoVert(e, v, curLvl, 1, vertDataSize), finterpCount);
}
}
- VertDataMulN(q, (float) 1/sharpCount);
+ VertDataMulN(q, (float) 1/sharpCount, finterpCount);
if (sharpCount!=2 || allSharp) {
// q = q + (co-q)*avgSharpness
- VertDataCopy(r, co);
- VertDataSub(r, q);
- VertDataMulN(r, avgSharpness);
- VertDataAdd(q, r);
+ VertDataCopy(r, co, finterpCount);
+ VertDataSub(r, q, finterpCount);
+ VertDataMulN(r, avgSharpness, finterpCount);
+ VertDataAdd(q, r, finterpCount);
}
// r = co*.75 + q*.25
- VertDataCopy(r, co);
- VertDataMulN(r, .75f);
- VertDataMulN(q, .25f);
- VertDataAdd(r, q);
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list