[Bf-blender-cvs] [4224d22] master: Fix drawing subsurf & auto-smooth

Campbell Barton noreply at git.blender.org
Thu Aug 20 01:26:35 CEST 2015


Commit: 4224d22039a802e8d3f3ee3a73b0c6f2b9d93883
Author: Campbell Barton
Date:   Thu Aug 20 09:20:41 2015 +1000
Branches: master
https://developer.blender.org/rB4224d22039a802e8d3f3ee3a73b0c6f2b9d93883

Fix drawing subsurf & auto-smooth

Error caused by recent MFace removal from subsurf.

===================================================================

M	source/blender/blenkernel/intern/subsurf_ccg.c

===================================================================

diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index 0743087..94872dc 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -2674,7 +2674,7 @@ static void ccgDM_drawMappedFacesGLSL(DerivedMesh *dm,
 	int gridFaces = gridSize - 1;
 	int edgeSize = ccgSubSurf_getEdgeSize(ss);
 	DMFlagMat *faceFlags = ccgdm->faceFlags;
-	short (*lnors)[4][3] = dm->getTessFaceDataArray(dm, CD_TESSLOOPNORMAL);
+	const float (*lnors)[3] = dm->getLoopDataArray(dm, CD_NORMAL);
 	int a, i, do_draw, numVerts, matnr, new_matnr, totface;
 
 #ifdef WITH_OPENSUBDIV
@@ -2719,7 +2719,7 @@ static void ccgDM_drawMappedFacesGLSL(DerivedMesh *dm,
 	totface = ccgSubSurf_getNumFaces(ss);
 	for (a = 0, i = 0; i < totface; i++) {
 		CCGFace *f = ccgdm->faceMap[i].face;
-		short (*ln)[4][3] = NULL;
+		const float (*ln)[3] = NULL;
 		int S, x, y, drawSmooth;
 		int index = GET_INT_FROM_POINTER(ccgSubSurf_getFaceFaceHandle(f));
 		int origIndex = ccgDM_getFaceMapIndex(ss, f);
@@ -2737,7 +2737,7 @@ static void ccgDM_drawMappedFacesGLSL(DerivedMesh *dm,
 
 		if (lnors) {
 			ln = lnors;
-			lnors += gridFaces * gridFaces * numVerts;
+			lnors += (gridFaces * gridFaces * numVerts) * 4;
 		}
 
 		if (new_matnr != matnr) {
@@ -2768,19 +2768,19 @@ static void ccgDM_drawMappedFacesGLSL(DerivedMesh *dm,
 						float *dco = CCG_grid_elem_co(&key, faceGridData, x, y + 1);
 
 						PASSATTRIB(0, 1, 1);
-						glNormal3sv(ln[0][1]);
+						glNormal3fv(ln[1]);
 						glVertex3fv(dco);
 						PASSATTRIB(1, 1, 2);
-						glNormal3sv(ln[0][2]);
+						glNormal3fv(ln[2]);
 						glVertex3fv(cco);
 						PASSATTRIB(1, 0, 3);
-						glNormal3sv(ln[0][3]);
+						glNormal3fv(ln[3]);
 						glVertex3fv(bco);
 						PASSATTRIB(0, 0, 0);
-						glNormal3sv(ln[0][0]);
+						glNormal3fv(ln[0]);
 						glVertex3fv(aco);
 
-						ln++;
+						ln += 4;
 						a++;
 					}
 				}
@@ -2871,7 +2871,7 @@ static void ccgDM_drawMappedFacesMat(DerivedMesh *dm,
 	int gridFaces = gridSize - 1;
 	int edgeSize = ccgSubSurf_getEdgeSize(ss);
 	DMFlagMat *faceFlags = ccgdm->faceFlags;
-	short (*lnors)[4][3] = dm->getTessFaceDataArray(dm, CD_TESSLOOPNORMAL);
+	const float (*lnors)[3] = dm->getLoopDataArray(dm, CD_NORMAL);
 	int a, i, numVerts, matnr, new_matnr, totface;
 
 #ifdef WITH_OPENSUBDIV
@@ -2897,7 +2897,7 @@ static void ccgDM_drawMappedFacesMat(DerivedMesh *dm,
 	totface = ccgSubSurf_getNumFaces(ss);
 	for (a = 0, i = 0; i < totface; i++) {
 		CCGFace *f = ccgdm->faceMap[i].face;
-		short (*ln)[4][3] = NULL;
+		const float (*ln)[3] = NULL;
 		int S, x, y, drawSmooth;
 		int index = GET_INT_FROM_POINTER(ccgSubSurf_getFaceFaceHandle(f));
 		int origIndex = ccgDM_getFaceMapIndex(ss, f);
@@ -2916,7 +2916,7 @@ static void ccgDM_drawMappedFacesMat(DerivedMesh *dm,
 
 		if (lnors) {
 			ln = lnors;
-			lnors += gridFaces * gridFaces * numVerts;
+			lnors += (gridFaces * gridFaces * numVerts) * 4;
 		}
 
 		/* material */
@@ -2947,19 +2947,19 @@ static void ccgDM_drawMappedFacesMat(DerivedMesh *dm,
 						float *dco = CCG_grid_elem_co(&key, faceGridData, x, y + 1);
 
 						PASSATTRIB(0, 1, 1);
-						glNormal3sv(ln[0][1]);
+						glNormal3fv(ln[1]);
 						glVertex3fv(dco);
 						PASSATTRIB(1, 1, 2);
-						glNormal3sv(ln[0][2]);
+						glNormal3fv(ln[2]);
 						glVertex3fv(cco);
 						PASSATTRIB(1, 0, 3);
-						glNormal3sv(ln[0][3]);
+						glNormal3fv(ln[3]);
 						glVertex3fv(bco);
 						PASSATTRIB(0, 0, 0);
-						glNormal3sv(ln[0][0]);
+						glNormal3fv(ln[0]);
 						glVertex3fv(aco);
 
-						ln++;
+						ln += 4;
 						a++;
 					}
 				}
@@ -3225,7 +3225,7 @@ static void ccgDM_drawMappedFaces(DerivedMesh *dm,
 	CCGSubSurf *ss = ccgdm->ss;
 	CCGKey key;
 	MLoopCol *mloopcol = NULL;
-	short (*lnors)[4][3] = dm->getTessFaceDataArray(dm, CD_TESSLOOPNORMAL);
+	const float (*lnors)[3] = dm->getLoopDataArray(dm, CD_NORMAL);
 	int i, gridSize = ccgSubSurf_getGridSize(ss);
 	DMFlagMat *faceFlags = ccgdm->faceFlags;
 	int useColors = flag & DM_DRAW_USE_COLORS;
@@ -3270,7 +3270,7 @@ static void ccgDM_drawMappedFaces(DerivedMesh *dm,
 		int drawSmooth, index = ccgDM_getFaceMapIndex(ss, f);
 		int origIndex;
 		unsigned char *cp = NULL;
-		short (*ln)[4][3] = NULL;
+		const float (*ln)[3] = NULL;
 
 		origIndex = GET_INT_FROM_POINTER(ccgSubSurf_getFaceFaceHandle(f));
 
@@ -3285,7 +3285,7 @@ static void ccgDM_drawMappedFaces(DerivedMesh *dm,
 
 		if (lnors) {
 			ln = lnors;
-			lnors += gridFaces * gridFaces * numVerts;
+			lnors += (gridFaces * gridFaces * numVerts) * 4;
 		}
 
 		{
@@ -3325,20 +3325,20 @@ static void ccgDM_drawMappedFaces(DerivedMesh *dm,
 								float *d = CCG_grid_elem_co(&key, faceGridData, x, y + 1);
 
 								if (cp) glColor3ubv(&cp[4]);
-								glNormal3sv(ln[0][1]);
+								glNormal3fv(ln[1]);
 								glVertex3fv(d);
 								if (cp) glColor3ubv(&cp[8]);
-								glNormal3sv(ln[0][2]);
+								glNormal3fv(ln[2]);
 								glVertex3fv(c);
 								if (cp) glColor3ubv(&cp[12]);
-								glNormal3sv(ln[0][3]);
+								glNormal3fv(ln[3]);
 								glVertex3fv(b);
 								if (cp) glColor3ubv(&cp[0]);
-								glNormal3sv(ln[0][0]);
+								glNormal3fv(ln[0]);
 								glVertex3fv(a);
 
 								if (cp) cp += 16;
-								ln++;
+								ln += 4;
 							}
 						}
 						glEnd();




More information about the Bf-blender-cvs mailing list