[Bf-blender-cvs] [17241bb] opensubdiv-modifier: Merge branch 'master' into opensubdiv-modifier
Sergey Sharybin
noreply at git.blender.org
Mon Jun 16 19:15:53 CEST 2014
Commit: 17241bba4c6f5d634854b6bbeb26d7b226063477
Author: Sergey Sharybin
Date: Mon Jun 16 23:15:18 2014 +0600
https://developer.blender.org/rB17241bba4c6f5d634854b6bbeb26d7b226063477
Merge branch 'master' into opensubdiv-modifier
Conflicts:
source/blender/blenkernel/intern/subsurf_ccg.c
source/blender/windowmanager/intern/wm_init_exit.c
===================================================================
===================================================================
diff --cc source/blender/blenkernel/intern/subsurf_ccg.c
index 15287a4,990e7e9..d927129
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@@ -3688,146 -3680,129 +3688,147 @@@ static CCGDerivedMesh *getCCGDerivedMes
vertNum++;
}
}
- }
- if (edgeOrigIndex) {
- for (i = 0; i < numFinalEdges; ++i) {
- edgeOrigIndex[edgeNum + i] = ORIGINDEX_NONE;
- }
- }
+ /*interpolate per-vert data*/
+ for (s = 0; s < numVerts; s++) {
+ for (y = 1; y < gridFaces; y++) {
+ for (x = 1; x < gridFaces; x++) {
+ w2 = w + s * numVerts * g2_wid * g2_wid + (y * g2_wid + x) * numVerts;
+ DM_interp_vert_data(dm, &ccgdm->dm, vertidx, w2,
+ numVerts, vertNum);
+
+ if (vertOrigIndex) {
+ *vertOrigIndex = ORIGINDEX_NONE;
+ vertOrigIndex++;
+ }
- for (s = 0; s < numVerts; s++) {
- /*interpolate per-face data*/
- for (y = 0; y < gridFaces; y++) {
- for (x = 0; x < gridFaces; x++) {
- w2 = w + s * numVerts * g2_wid * g2_wid + (y * g2_wid + x) * numVerts;
- CustomData_interp(&dm->loopData, &ccgdm->dm.loopData,
- loopidx, w2, NULL, numVerts, loopindex2);
- loopindex2++;
-
- w2 = w + s * numVerts * g2_wid * g2_wid + ((y + 1) * g2_wid + (x)) * numVerts;
- CustomData_interp(&dm->loopData, &ccgdm->dm.loopData,
- loopidx, w2, NULL, numVerts, loopindex2);
- loopindex2++;
-
- w2 = w + s * numVerts * g2_wid * g2_wid + ((y + 1) * g2_wid + (x + 1)) * numVerts;
- CustomData_interp(&dm->loopData, &ccgdm->dm.loopData,
- loopidx, w2, NULL, numVerts, loopindex2);
- loopindex2++;
-
- w2 = w + s * numVerts * g2_wid * g2_wid + ((y) * g2_wid + (x + 1)) * numVerts;
- CustomData_interp(&dm->loopData, &ccgdm->dm.loopData,
- loopidx, w2, NULL, numVerts, loopindex2);
- loopindex2++;
-
- /*copy over poly data, e.g. mtexpoly*/
- CustomData_copy_data(&dm->polyData, &ccgdm->dm.polyData, origIndex, faceNum, 1);
-
- /*generate tessellated face data used for drawing*/
- ccg_loops_to_corners(&ccgdm->dm.faceData, &ccgdm->dm.loopData,
- &ccgdm->dm.polyData, loopindex2 - 4, faceNum, faceNum,
- numTex, numCol, hasPCol, hasOrigSpace);
-
- /*set original index data*/
- if (faceOrigIndex) {
- /* reference the index in 'polyOrigIndex' */
- *faceOrigIndex = faceNum;
- faceOrigIndex++;
+ vertNum++;
}
- if (polyOrigIndex) {
- *polyOrigIndex = base_polyOrigIndex ? base_polyOrigIndex[origIndex] : origIndex;
- polyOrigIndex++;
- }
-
- ccgdm->reverseFaceMap[faceNum] = index;
-
- /* This is a simple one to one mapping, here... */
- polyidx[faceNum] = faceNum;
-
- faceNum++;
}
}
- }
- edgeNum += numFinalEdges;
- }
+ if (edgeOrigIndex) {
+ for (i = 0; i < numFinalEdges; ++i) {
+ edgeOrigIndex[edgeNum + i] = ORIGINDEX_NONE;
+ }
+ }
- for (index = 0; index < totedge; ++index) {
- CCGEdge *e = ccgdm->edgeMap[index].edge;
- int numFinalEdges = edgeSize - 1;
- int mapIndex = ccgDM_getEdgeMapIndex(ss, e);
- int x;
- int vertIdx[2];
- int edgeIdx = GET_INT_FROM_POINTER(ccgSubSurf_getEdgeEdgeHandle(e));
+ for (s = 0; s < numVerts; s++) {
+ /*interpolate per-face data*/
+ for (y = 0; y < gridFaces; y++) {
+ for (x = 0; x < gridFaces; x++) {
+ w2 = w + s * numVerts * g2_wid * g2_wid + (y * g2_wid + x) * numVerts;
+ CustomData_interp(&dm->loopData, &ccgdm->dm.loopData,
+ loopidx, w2, NULL, numVerts, loopindex2);
+ loopindex2++;
+
+ w2 = w + s * numVerts * g2_wid * g2_wid + ((y + 1) * g2_wid + (x)) * numVerts;
+ CustomData_interp(&dm->loopData, &ccgdm->dm.loopData,
+ loopidx, w2, NULL, numVerts, loopindex2);
+ loopindex2++;
+
+ w2 = w + s * numVerts * g2_wid * g2_wid + ((y + 1) * g2_wid + (x + 1)) * numVerts;
+ CustomData_interp(&dm->loopData, &ccgdm->dm.loopData,
+ loopidx, w2, NULL, numVerts, loopindex2);
+ loopindex2++;
+
+ w2 = w + s * numVerts * g2_wid * g2_wid + ((y) * g2_wid + (x + 1)) * numVerts;
+ CustomData_interp(&dm->loopData, &ccgdm->dm.loopData,
+ loopidx, w2, NULL, numVerts, loopindex2);
+ loopindex2++;
+
+ /*copy over poly data, e.g. mtexpoly*/
+ CustomData_copy_data(&dm->polyData, &ccgdm->dm.polyData, origIndex, faceNum, 1);
+
+ /*generate tessellated face data used for drawing*/
+ ccg_loops_to_corners(&ccgdm->dm.faceData, &ccgdm->dm.loopData,
+ &ccgdm->dm.polyData, loopindex2 - 4, faceNum, faceNum,
+ numTex, numCol, hasPCol, hasOrigSpace);
+
+ /*set original index data*/
+ if (faceOrigIndex) {
+ /* reference the index in 'polyOrigIndex' */
+ *faceOrigIndex = faceNum;
+ faceOrigIndex++;
+ }
+ if (polyOrigIndex) {
+ *polyOrigIndex = base_polyOrigIndex ? base_polyOrigIndex[origIndex] : origIndex;
+ polyOrigIndex++;
+ }
- CCGVert *v;
- v = ccgSubSurf_getEdgeVert0(e);
- vertIdx[0] = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v));
- v = ccgSubSurf_getEdgeVert1(e);
- vertIdx[1] = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v));
+ ccgdm->reverseFaceMap[faceNum] = index;
- ccgdm->edgeMap[index].startVert = vertNum;
- ccgdm->edgeMap[index].startEdge = edgeNum;
+ /* This is a simple one to one mapping, here... */
+ polyidx[faceNum] = faceNum;
- if (edgeIdx >= 0 && edgeFlags)
- edgeFlags[edgeIdx] = medge[edgeIdx].flag;
+ faceNum++;
+ }
+ }
+ }
- /* set the edge base vert */
- *((int *)ccgSubSurf_getEdgeUserData(ss, e)) = vertNum;
+ edgeNum += numFinalEdges;
+ }
- for (x = 1; x < edgeSize - 1; x++) {
- float w[2];
- w[1] = (float) x / (edgeSize - 1);
- w[0] = 1 - w[1];
- DM_interp_vert_data(dm, &ccgdm->dm, vertIdx, w, 2, vertNum);
- if (vertOrigIndex) {
- *vertOrigIndex = ORIGINDEX_NONE;
- vertOrigIndex++;
+ for (index = 0; index < totedge; ++index) {
+ CCGEdge *e = ccgdm->edgeMap[index].edge;
+ int numFinalEdges = edgeSize - 1;
+ int mapIndex = ccgDM_getEdgeMapIndex(ss, e);
+ int x;
+ int vertIdx[2];
+ int edgeIdx = GET_INT_FROM_POINTER(ccgSubSurf_getEdgeEdgeHandle(e));
+
+ CCGVert *v;
+ v = ccgSubSurf_getEdgeVert0(e);
+ vertIdx[0] = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v));
+ v = ccgSubSurf_getEdgeVert1(e);
+ vertIdx[1] = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v));
+
+ ccgdm->edgeMap[index].startVert = vertNum;
+ ccgdm->edgeMap[index].startEdge = edgeNum;
+
+ if (edgeIdx >= 0 && edgeFlags)
+ edgeFlags[edgeIdx] = medge[edgeIdx].flag;
+
+ /* set the edge base vert */
+ *((int *)ccgSubSurf_getEdgeUserData(ss, e)) = vertNum;
+
+ for (x = 1; x < edgeSize - 1; x++) {
+ float w[2];
+ w[1] = (float) x / (edgeSize - 1);
+ w[0] = 1 - w[1];
+ DM_interp_vert_data(dm, &ccgdm->dm, vertIdx, w, 2, vertNum);
+ if (vertOrigIndex) {
+ *vertOrigIndex = ORIGINDEX_NONE;
+ vertOrigIndex++;
+ }
+ vertNum++;
}
- vertNum++;
- }
- if (has_edge_cd) {
- BLI_assert(edgeIdx >= 0 && edgeIdx < dm->getNumEdges(dm));
- for (i = 0; i < numFinalEdges; ++i) {
- CustomData_copy_data(&dm->edgeData, &ccgdm->dm.edgeData, edgeIdx, edgeNum + i, 1);
+ if (has_edge_cd) {
++ BLI_assert(edgeIdx >= 0 && edgeIdx < dm->getNumEdges(dm));
+ for (i = 0; i < numFinalEdges; ++i) {
- CustomData_copy_data(&dm->edgeData, &ccgdm->dm.edgeData, mapIndex, edgeNum + i, 1);
++ CustomData_copy_data(&dm->edgeData, &ccgdm->dm.edgeData, edgeIdx, edgeNum + i, 1);
+ }
}
- }
- if (edgeOrigIndex) {
- for (i = 0; i < numFinalEdges; ++i) {
- edgeOrigIndex[edgeNum + i] = mapIndex;
+ if (edgeOrigIndex) {
+ for (i = 0; i < numFinalEdges; ++i) {
+ edgeOrigIndex[edgeNum + i] = mapIndex;
+ }
}
- }
- edgeNum += numFinalEdges;
- }
+ edgeNum += numFinalEdges;
+ }
- if (useSubsurfUv) {
- CustomData *ldata = &ccgdm->dm.loopData;
- CustomData *dmldata = &dm->loopData;
- int numlayer = CustomData_number_of_layers(ldata, CD_MLOOPUV);
- int dmnumlayer = CustomData_number_of_layers(dmldata, CD_MLOOPUV);
+ if (useSubsurfUv) {
+ CustomData *ldata = &ccgdm->dm.loopData;
+ CustomData *dmldata = &dm->loopData;
+ int numlayer = CustomData_number_of_layers(ldata, CD_MLOOPUV);
+ int dmnumlayer = CustomData_number_of_layers(dmldata, CD_MLOOPUV);
- for (i = 0; i < numlayer && i < dmnumlayer; i++)
- set_subsurf_uv(ss, dm, &ccgdm->dm, i);
+ for (i = 0; i < numlayer && i < dmnumlayer; i++)
+ set_subsurf_uv(ss, dm, &ccgdm->dm, i);
+ }
}
for (index = 0; index < totvert; ++index) {
diff --cc source/blender/windowmanager/intern/wm_init_exit.c
index e2a09ca,675eb5e..967410f
--- a/source/blender/windowmanager/intern/wm_init_exit.c
+++ b/source/blender/windowmanager/intern/wm_init_exit.c
@@@ -494,13 -490,11 +494,15 @@@ void WM_exit_ext(bContext *C, const boo
(void)do_python;
#endif
+#ifdef WITH_OPENSUBDIV
+ openSubdiv_cleanup();
+#endif
+
- GPU_global_buffer_pool_free();
- GPU_free_unused_buffers();
- GPU_extensions_exit();
+ if (!G.background) {
+ GPU_global_buffer_pool_free();
+ GPU_free_unused_buffers();
+ GPU_extensions_exit();
+ }
BKE_reset_undo();
More information about the Bf-blender-cvs
mailing list