[Bf-blender-cvs] [5d9a863] temp-derivedmesh-looptri: Correctly support UVs with VBO/cddm

Antony Riakiotakis noreply at git.blender.org
Wed Jul 15 21:00:42 CEST 2015


Commit: 5d9a86356fc0bba8ca345d287fcddff411d0602d
Author: Antony Riakiotakis
Date:   Wed Jul 15 21:00:34 2015 +0200
Branches: temp-derivedmesh-looptri
https://developer.blender.org/rB5d9a86356fc0bba8ca345d287fcddff411d0602d

Correctly support UVs with VBO/cddm

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

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

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

diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index bf1a9cf..549cc81 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -366,35 +366,31 @@ static void cdDM_drawVerts(DerivedMesh *dm)
 static void cdDM_drawUVEdges(DerivedMesh *dm)
 {
 	CDDerivedMesh *cddm = (CDDerivedMesh *) dm;
-	const MLoopTri *lt = dm->looptris.array;
 	int i;
+	const MPoly *mpoly = cddm->mpoly;
+	int totpoly = dm->getNumPolys(dm);
+	int prevstart = 0;
+	bool prevdraw = true;
+	int curpos = 0;
 
-	if (lt) {
-		const MPoly *mpoly = cddm->mpoly;
-		int prevstart = 0;
-		bool prevdraw = true;
-		int curpos = 0;
-		
-		GPU_uvedge_setup(dm);
-		for (i = 0; i < dm->looptris.num; i++, lt++) {
-			const MPoly *mp = &mpoly[lt->poly];
-			const bool draw = (mp->flag & ME_HIDE) == 0;
+	GPU_uvedge_setup(dm);
+	for (i = 0; i < totpoly; i++, mpoly++) {
+		const bool draw = (mpoly->flag & ME_HIDE) == 0;
 
-			if (prevdraw != draw) {
-				if (prevdraw && (curpos != prevstart)) {
-					glDrawArrays(GL_LINES, prevstart, curpos - prevstart);
-				}
-				prevstart = curpos;
+		if (prevdraw != draw) {
+			if (prevdraw && (curpos != prevstart)) {
+				glDrawArrays(GL_LINES, prevstart, curpos - prevstart);
 			}
-
-			curpos += 6;
-			prevdraw = draw;
+			prevstart = curpos;
 		}
-		if (prevdraw && (curpos != prevstart)) {
-			glDrawArrays(GL_LINES, prevstart, curpos - prevstart);
-		}
-		GPU_buffer_unbind();
+
+		curpos += 2 * mpoly->totloop;
+		prevdraw = draw;
+	}
+	if (prevdraw && (curpos != prevstart)) {
+		glDrawArrays(GL_LINES, prevstart, curpos - prevstart);
 	}
+	GPU_buffer_unbind();
 }
 
 static void cdDM_drawEdges(DerivedMesh *dm, bool drawLooseEdges, bool drawAllEdges)
@@ -1508,31 +1504,24 @@ static void cdDM_buffer_copy_edge(
 static void cdDM_buffer_copy_uvedge(
         DerivedMesh *dm, float *varray)
 {
-	int i, tottri;
+	int i, j, totpoly;
 	int start;
-	const MLoopTri *lt;
 	const MLoopUV *mloopuv;
+	const MPoly *mpoly = dm->getPolyArray(dm);
 
 	if ((mloopuv = DM_get_loop_data_layer(dm, CD_MLOOPUV)) == NULL) {
 		return;
 	}
 
-	lt = dm->looptris.array;
-	tottri = dm->looptris.num;
+	totpoly = dm->getNumPolys(dm);
 	start = 0;
 
-	for (i = 0; i < tottri; i++, lt++) {
-		const unsigned int *ltri = lt->tri;
-
-		copy_v2_v2(&varray[start + 0], mloopuv[ltri[0]].uv);
-		copy_v2_v2(&varray[start + 2], mloopuv[ltri[1]].uv);
-
-		copy_v2_v2(&varray[start + 4], mloopuv[ltri[1]].uv);
-		copy_v2_v2(&varray[start + 6], mloopuv[ltri[2]].uv);
-
-		copy_v2_v2(&varray[start + 8], mloopuv[ltri[2]].uv);
-		copy_v2_v2(&varray[start + 10], mloopuv[ltri[0]].uv);
-		start += 12;
+	for (i = 0; i < totpoly; i++, mpoly++) {
+		for (j = 0; j < mpoly->totloop; j++) {
+			copy_v2_v2(&varray[start], mloopuv[mpoly->loopstart + j].uv);
+			copy_v2_v2(&varray[start + 2], mloopuv[mpoly->loopstart + (j + 1) % mpoly->totloop].uv);
+			start += 4;
+		}
 	}
 }




More information about the Bf-blender-cvs mailing list