[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44731] trunk/blender/source/blender: Code cleanup: use named values for options in DerivedMesh drawing.

Nicholas Bishop nicholasbishop at gmail.com
Thu Mar 8 07:47:13 CET 2012


Revision: 44731
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44731
Author:   nicholasbishop
Date:     2012-03-08 06:47:05 +0000 (Thu, 08 Mar 2012)
Log Message:
-----------
Code cleanup: use named values for options in DerivedMesh drawing.

The DMSetDrawOptions[Tex] callbacks return 0 (skip), 1 (draw), or 2
(either stipple or skip mcols.) In the CDDM, EDDM, and CCGDM draw
functions, as well as the callbacks in drawmesh/drawobject, replace
these numbers with values from an enum, DMDrawOptions.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h
    trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c
    trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c
    trunk/blender/source/blender/editors/space_view3d/drawmesh.c
    trunk/blender/source/blender/editors/space_view3d/drawobject.c

Modified: trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h	2012-03-08 05:36:05 UTC (rev 44730)
+++ trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h	2012-03-08 06:47:05 UTC (rev 44731)
@@ -124,12 +124,23 @@
 	DM_TYPE_CCGDM
 } DerivedMeshType;
 
+typedef enum DMDrawOption {
+	/* the element is hidden or otherwise non-drawable */
+	DM_DRAW_OPTION_SKIP = 0,
+	/* normal drawing */
+	DM_DRAW_OPTION_NORMAL = 1,
+	/* draw, but don't set the color from mcol */
+	DM_DRAW_OPTION_NO_MCOL = 2,
+	/* used in drawMappedFaces, use GL stipple for the face */
+	DM_DRAW_OPTION_STIPPLE = 3,
+} DMDrawOption;
+
 /* Drawing callback types */
 typedef int (*DMSetMaterial)(int mat_nr, void *attribs);
 typedef int (*DMCompareDrawOptions)(void *userData, int cur_index, int next_index);
 typedef void (*DMSetDrawInterpOptions)(void *userData, int index, float t);
-typedef int (*DMSetDrawOptions)(void *userData, int index);
-typedef int (*DMSetDrawOptionsTex)(struct MTFace *tface, int has_vcol, int matnr);
+typedef DMDrawOption (*DMSetDrawOptions)(void *userData, int index);
+typedef DMDrawOption (*DMSetDrawOptionsTex)(struct MTFace *tface, int has_vcol, int matnr);
 
 typedef enum DMDrawFlag {
 	DM_DRAW_USE_COLORS = 1,

Modified: trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2012-03-08 05:36:05 UTC (rev 44730)
+++ trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2012-03-08 06:47:05 UTC (rev 44731)
@@ -623,26 +623,26 @@
 		DEBUG_VBO( "Using legacy code. cdDM_drawFacesTex_common\n" );
 		for(i = 0; i < dm->numTessFaceData; i++, mf++) {
 			MVert *mvert;
-			int flag;
+			DMDrawOption draw_option;
 			unsigned char *cp = NULL;
 
 			if(drawParams) {
-				flag = drawParams(tf? &tf[i]: NULL, (mcol != NULL), mf->mat_nr);
+				draw_option = drawParams(tf? &tf[i]: NULL, (mcol != NULL), mf->mat_nr);
 			}
 			else {
 				if(index) {
 					orig = *index++;
 					if(orig == ORIGINDEX_NONE)		{ if(nors) nors += 3; continue; }
-					if(drawParamsMapped) flag = drawParamsMapped(userData, orig);
+					if(drawParamsMapped) draw_option = drawParamsMapped(userData, orig);
 					else	{ if(nors) nors += 3; continue; }
 				}
 				else
-					if(drawParamsMapped) flag = drawParamsMapped(userData, i);
+					if(drawParamsMapped) draw_option = drawParamsMapped(userData, i);
 					else	{ if(nors) nors += 3; continue; }
 			}
 			
-			if(flag != 0) {
-				if (flag==1 && mcol)
+			if(draw_option != DM_DRAW_OPTION_SKIP) {
+				if (draw_option != DM_DRAW_OPTION_NO_MCOL && mcol)
 					cp= (unsigned char*) &mcol[i*4];
 
 				if(!(mf->flag&ME_SMOOTH)) {
@@ -734,29 +734,29 @@
 			/* lastFlag = 0; */ /* UNUSED */
 			for(i = 0; i < tottri; i++) {
 				int actualFace = next_actualFace;
-				int flag = 1;
+				DMDrawOption draw_option = DM_DRAW_OPTION_NORMAL;
 				int flush = 0;
 
 				if(i != tottri-1)
 					next_actualFace= dm->drawObject->triangle_to_mface[i+1];
 
 				if(drawParams) {
-					flag = drawParams(tf? &tf[actualFace]: NULL, (mcol != NULL), mf[actualFace].mat_nr);
+					draw_option = drawParams(tf? &tf[actualFace]: NULL, (mcol != NULL), mf[actualFace].mat_nr);
 				}
 				else {
 					if(index) {
 						orig = index[actualFace];
 						if(orig == ORIGINDEX_NONE) continue;
 						if(drawParamsMapped)
-							flag = drawParamsMapped(userData, orig);
+							draw_option = drawParamsMapped(userData, orig);
 					}
 					else
 						if(drawParamsMapped)
-							flag = drawParamsMapped(userData, actualFace);
+							draw_option = drawParamsMapped(userData, actualFace);
 				}
 
 				/* flush buffer if current triangle isn't drawable or it's last triangle */
-				flush= !flag || i == tottri - 1;
+				flush= (draw_option == DM_DRAW_OPTION_SKIP) || (i == tottri - 1);
 
 				if(!flush && compareDrawOptions) {
 					/* also compare draw options and flush buffer if they're different
@@ -766,7 +766,8 @@
 
 				if(flush) {
 					int first= startFace*3;
-					int count= (i-startFace+(flag ? 1 : 0))*3; /* Add one to the length if we're drawing at the end of the array */
+					/* Add one to the length if we're drawing at the end of the array */
+					int count= (i-startFace+(draw_option != DM_DRAW_OPTION_SKIP ? 1 : 0))*3;
 
 					if(count) {
 						if (col)
@@ -823,16 +824,16 @@
 		DEBUG_VBO( "Using legacy code. cdDM_drawMappedFaces\n" );
 		for(i = 0; i < dm->numTessFaceData; i++, mf++) {
 			int drawSmooth = (flag & DM_DRAW_ALWAYS_SMOOTH) ? 1 : (mf->flag & ME_SMOOTH);
-			int draw= 1;
+			DMDrawOption draw_option= DM_DRAW_OPTION_NORMAL;
 
 			orig= (index==NULL) ? i : *index++;
 			
 			if(orig == ORIGINDEX_NONE)
-				draw= setMaterial(mf->mat_nr + 1, NULL);
+				draw_option= setMaterial(mf->mat_nr + 1, NULL);
 			else if (setDrawOptions != NULL)
-				draw= setDrawOptions(userData, orig);
+				draw_option= setDrawOptions(userData, orig);
 
-			if(draw) {
+			if(draw_option != DM_DRAW_OPTION_SKIP) {
 				unsigned char *cp = NULL;
 
 				if(useColors && mc)
@@ -916,7 +917,7 @@
 					int actualFace = next_actualFace;
 					MFace *mface= mf + actualFace;
 					/*int drawSmooth= (flag & DM_DRAW_ALWAYS_SMOOTH) ? 1 : (mface->flag & ME_SMOOTH);*/ /* UNUSED */
-					int draw = 1;
+					DMDrawOption draw_option = DM_DRAW_OPTION_NORMAL;
 					int flush = 0;
 
 					if(i != tottri-1)
@@ -925,16 +926,16 @@
 					orig= (index==NULL) ? actualFace : index[actualFace];
 
 					if(orig == ORIGINDEX_NONE)
-						draw= setMaterial(mface->mat_nr + 1, NULL);
+						draw_option= setMaterial(mface->mat_nr + 1, NULL);
 					else if (setDrawOptions != NULL)
-						draw= setDrawOptions(userData, orig);
+						draw_option= setDrawOptions(userData, orig);
 	
 					/* Goal is to draw as long of a contiguous triangle
 					   array as possible, so draw when we hit either an
 					   invisible triangle or at the end of the array */
 
 					/* flush buffer if current triangle isn't drawable or it's last triangle... */
-					flush= !draw || i == tottri - 1;
+					flush= (draw_option == DM_DRAW_OPTION_SKIP) || (i == tottri - 1);
 
 					/* ... or when material setting is dissferent  */
 					flush|= mf[actualFace].mat_nr != mf[next_actualFace].mat_nr;
@@ -945,7 +946,8 @@
 
 					if(flush) {
 						int first= prevstart*3;
-						int count= (i-prevstart+(draw ? 1 : 0))*3; /* Add one to the length if we're drawing at the end of the array */
+						/* Add one to the length if we're drawing at the end of the array */
+						int count= (i-prevstart+(draw_option != DM_DRAW_OPTION_SKIP ? 1 : 0))*3;
 
 						if(count)
 							glDrawArrays(GL_TRIANGLES, first, count);
@@ -1067,7 +1069,7 @@
 					
 					/* continue */
 				}
-				else if(!setDrawOptions(userData, orig))
+				else if(setDrawOptions(userData, orig) == DM_DRAW_OPTION_SKIP)
 					continue;
 			}
 
@@ -1403,7 +1405,7 @@
 		else
 			orig = i;
 
-		if(!setDrawOptions || setDrawOptions(userData, orig)) {
+		if(!setDrawOptions || (setDrawOptions(userData, orig) != DM_DRAW_OPTION_SKIP)) {
 			glVertex3fv(vert[edge->v1].co);
 			glVertex3fv(vert[edge->v2].co);
 		}

Modified: trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c	2012-03-08 05:36:05 UTC (rev 44730)
+++ trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c	2012-03-08 06:47:05 UTC (rev 44731)
@@ -414,7 +414,7 @@
 		glBegin(GL_LINES);
 		eed = BM_iter_new(&iter, bmdm->tc->bm, BM_EDGES_OF_MESH, NULL);
 		for (i=0; eed; i++,eed=BM_iter_step(&iter)) {
-			if (!setDrawOptions || setDrawOptions(userData, i)) {
+			if (!setDrawOptions || (setDrawOptions(userData, i) != DM_DRAW_OPTION_SKIP)) {
 				glVertex3fv(bmdm->vertexCos[BM_elem_index_get(eed->v1)]);
 				glVertex3fv(bmdm->vertexCos[BM_elem_index_get(eed->v2)]);
 			}
@@ -425,7 +425,7 @@
 		glBegin(GL_LINES);
 		eed = BM_iter_new(&iter, bmdm->tc->bm, BM_EDGES_OF_MESH, NULL);
 		for (i=0; eed; i++,eed=BM_iter_step(&iter)) {
-			if (!setDrawOptions || setDrawOptions(userData, i)) {
+			if (!setDrawOptions || (setDrawOptions(userData, i) != DM_DRAW_OPTION_SKIP)) {
 				glVertex3fv(eed->v1->co);
 				glVertex3fv(eed->v2->co);
 			}
@@ -459,7 +459,7 @@
 		glBegin(GL_LINES);
 		eed = BM_iter_new(&iter, bmdm->tc->bm, BM_EDGES_OF_MESH, NULL);
 		for (i=0; eed; i++,eed=BM_iter_step(&iter)) {
-			if (!setDrawOptions || setDrawOptions(userData, i)) {
+			if (!setDrawOptions || (setDrawOptions(userData, i) != DM_DRAW_OPTION_SKIP)) {
 				setDrawInterpOptions(userData, i, 0.0);
 				glVertex3fv(bmdm->vertexCos[BM_elem_index_get(eed->v1)]);
 				setDrawInterpOptions(userData, i, 1.0);
@@ -472,7 +472,7 @@
 		glBegin(GL_LINES);
 		eed = BM_iter_new(&iter, bmdm->tc->bm, BM_EDGES_OF_MESH, NULL);
 		for (i=0; eed; i++,eed=BM_iter_step(&iter)) {
-			if (!setDrawOptions || setDrawOptions(userData, i)) {
+			if (!setDrawOptions || (setDrawOptions(userData, i) != DM_DRAW_OPTION_SKIP)) {
 				setDrawInterpOptions(userData, i, 0.0);
 				glVertex3fv(eed->v1->co);
 				setDrawInterpOptions(userData, i, 1.0);
@@ -590,7 +590,8 @@
 	struct BMLoop *(*looptris)[3]= bmdm->tc->looptris;
 	const int tottri= bmdm->tc->tottri;
 	const int lasttri= tottri - 1; /* compare agasint this a lot */
-	int i, draw, flush;
+	DMDrawOption draw_option;
+	int i, flush;
 	const int skip_normals= !glIsEnabled(GL_LIGHTING); /* could be passed as an arg */
 
 	/* GL_ZERO is used to detect if drawing has started or not */
@@ -618,10 +619,12 @@
 			efa = l[0]->f;
 			drawSmooth= (flag & DM_DRAW_ALWAYS_SMOOTH) ? 1 : BM_elem_flag_test(efa, BM_ELEM_SMOOTH);
 
-			draw = setDrawOptions==NULL ? 1 : setDrawOptions(userData, BM_elem_index_get(efa));
-			if (draw) {
+			draw_option = (!setDrawOptions ?
+						   DM_DRAW_OPTION_NORMAL :
+						   setDrawOptions(userData, BM_elem_index_get(efa)));
+			if (draw_option != DM_DRAW_OPTION_SKIP) {
 				const GLenum poly_type= GL_TRIANGLES; /* BMESH NOTE, this is odd but keep it for now to match trunk */
-				if (draw==2) { /* enabled with stipple */
+				if (draw_option == DM_DRAW_OPTION_STIPPLE) { /* enabled with stipple */
 
 					if (poly_prev != GL_ZERO) glEnd();
 					poly_prev= GL_ZERO; /* force glBegin */
@@ -667,7 +670,7 @@
 					}
 				}
 
-				flush= (draw==2);

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list