[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44701] trunk/blender/source/blender: Code cleanup: simplify the DerivedMesh.drawMappedFaces interface.

Nicholas Bishop nicholasbishop at gmail.com
Wed Mar 7 13:49:01 CET 2012


Revision: 44701
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44701
Author:   nicholasbishop
Date:     2012-03-07 12:48:52 +0000 (Wed, 07 Mar 2012)
Log Message:
-----------
Code cleanup: simplify the DerivedMesh.drawMappedFaces interface.

This function pointer's 'setDrawOptions' parameter took a slightly
different type than the other drawing callbacks. In particular, it
could set a 'drawSmooth' value to indicate that smoothing should
always be enabled, overriding the face flag. However, all callbacks
either did not set this value, or set it unconditionally to
1. Replaced this by adding a new 'flag' parameter to drawFacesMapped,
which can be set to DM_DRAW_ALWAYS_SMOOTH where appropriate.

Also removed the 'useColors' parameter and replaced it with another
flag value, DM_DRAW_USE_COLORS.

Removed the 'wpaint__setSolidDrawOptions' callback, was only being
used to set the shading to smooth.

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-07 12:30:29 UTC (rev 44700)
+++ trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h	2012-03-07 12:48:52 UTC (rev 44701)
@@ -130,8 +130,12 @@
 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 int (*DMSetDrawOptionsShading)(void *userData, int index, int *drawSmooth_r);
 
+typedef enum DMDrawFlag {
+	DM_DRAW_USE_COLORS = 1,
+	DM_DRAW_ALWAYS_SMOOTH = 2
+} DMDrawFlag;
+
 typedef struct DerivedMesh DerivedMesh;
 struct DerivedMesh {
 	/* Private DerivedMesh data, only for internal DerivedMesh use */
@@ -346,10 +350,11 @@
 	 * smooth shaded.
 	 */
 	void (*drawMappedFaces)(DerivedMesh *dm,
-							DMSetDrawOptionsShading setDrawOptions,
+							DMSetDrawOptions setDrawOptions,
 							DMSetMaterial setMaterial,
 							DMCompareDrawOptions compareDrawOptions,
-							void *userData, int useColors);
+							void *userData,
+							DMDrawFlag flag);
 
 	/* Draw mapped faces using MTFace 
 	 *  o Drawing options too complicated to enumerate, look at code.

Modified: trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2012-03-07 12:30:29 UTC (rev 44700)
+++ trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2012-03-07 12:48:52 UTC (rev 44701)
@@ -796,16 +796,17 @@
 }
 
 static void cdDM_drawMappedFaces(DerivedMesh *dm,
-			DMSetDrawOptionsShading setDrawOptions,
+			DMSetDrawOptions setDrawOptions,
 			DMSetMaterial setMaterial,
 			DMCompareDrawOptions compareDrawOptions,
-			void *userData, int useColors)
+			void *userData, DMDrawFlag flag)
 {
 	CDDerivedMesh *cddm = (CDDerivedMesh*) dm;
 	MVert *mv = cddm->mvert;
 	MFace *mf = cddm->mface;
 	MCol *mc;
 	float *nors= DM_get_tessface_data_layer(dm, CD_NORMAL);
+	int useColors = flag & DM_DRAW_USE_COLORS;
 	int i, orig, *index = DM_get_tessface_data_layer(dm, CD_ORIGINDEX);
 
 	mc = DM_get_tessface_data_layer(dm, CD_ID_MCOL);
@@ -821,7 +822,7 @@
 	if( GPU_buffer_legacy(dm) || G.f & G_BACKBUFSEL) {
 		DEBUG_VBO( "Using legacy code. cdDM_drawMappedFaces\n" );
 		for(i = 0; i < dm->numTessFaceData; i++, mf++) {
-			int drawSmooth = (mf->flag & ME_SMOOTH);
+			int drawSmooth = (flag & DM_DRAW_ALWAYS_SMOOTH) ? 1 : (mf->flag & ME_SMOOTH);
 			int draw= 1;
 
 			orig= (index==NULL) ? i : *index++;
@@ -829,7 +830,7 @@
 			if(orig == ORIGINDEX_NONE)
 				draw= setMaterial(mf->mat_nr + 1, NULL);
 			else if (setDrawOptions != NULL)
-				draw= setDrawOptions(userData, orig, &drawSmooth);
+				draw= setDrawOptions(userData, orig);
 
 			if(draw) {
 				unsigned char *cp = NULL;
@@ -914,7 +915,7 @@
 					//int actualFace = dm->drawObject->triangle_to_mface[i];
 					int actualFace = next_actualFace;
 					MFace *mface= mf + actualFace;
-					int drawSmooth= (mface->flag & ME_SMOOTH);
+					/*int drawSmooth= (flag & DM_DRAW_ALWAYS_SMOOTH) ? 1 : (mface->flag & ME_SMOOTH);*/ /* UNUSED */
 					int draw = 1;
 					int flush = 0;
 
@@ -926,7 +927,7 @@
 					if(orig == ORIGINDEX_NONE)
 						draw= setMaterial(mface->mat_nr + 1, NULL);
 					else if (setDrawOptions != NULL)
-						draw= setDrawOptions(userData, orig, &drawSmooth);
+						draw= setDrawOptions(userData, orig);
 	
 					/* Goal is to draw as long of a contiguous triangle
 					   array as possible, so draw when we hit either an

Modified: trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c	2012-03-07 12:30:29 UTC (rev 44700)
+++ trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c	2012-03-07 12:48:52 UTC (rev 44701)
@@ -579,10 +579,11 @@
 
 static void emDM_drawMappedFaces(
 		DerivedMesh *dm,
-		DMSetDrawOptionsShading setDrawOptions,
+		DMSetDrawOptions setDrawOptions,
 		DMSetMaterial setMaterial,
 		DMCompareDrawOptions compareDrawOptions,
-		void *userData, int UNUSED(useColors))
+		void *userData,
+		DMDrawFlag flag)
 {
 	EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm;
 	BMFace *efa;
@@ -615,9 +616,9 @@
 			int drawSmooth;
 
 			efa = l[0]->f;
-			drawSmooth= BM_elem_flag_test(efa, BM_ELEM_SMOOTH);
+			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), &drawSmooth);
+			draw = setDrawOptions==NULL ? 1 : setDrawOptions(userData, BM_elem_index_get(efa));
 			if (draw) {
 				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 */
@@ -687,9 +688,9 @@
 			int drawSmooth;
 
 			efa = l[0]->f;
-			drawSmooth= BM_elem_flag_test(efa, BM_ELEM_SMOOTH);
+			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), &drawSmooth);
+			draw = setDrawOptions==NULL ? 1 : setDrawOptions(userData, BM_elem_index_get(efa));
 			if (draw) {
 				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 */

Modified: trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c	2012-03-07 12:30:29 UTC (rev 44700)
+++ trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c	2012-03-07 12:48:52 UTC (rev 44701)
@@ -2111,16 +2111,17 @@
 }
 
 static void ccgDM_drawMappedFaces(DerivedMesh *dm,
-			DMSetDrawOptionsShading setDrawOptions,
+			DMSetDrawOptions setDrawOptions,
 			DMSetMaterial setMaterial,
 			DMCompareDrawOptions compareDrawOptions,
-			void *userData, int useColors)
+			void *userData, DMDrawFlag flag)
 {
 	CCGDerivedMesh *ccgdm = (CCGDerivedMesh*) dm;
 	CCGSubSurf *ss = ccgdm->ss;
 	MCol *mcol= NULL;
 	int i, gridSize = ccgSubSurf_getGridSize(ss);
 	DMFlagMat *faceFlags = ccgdm->faceFlags;
+	int useColors = flag & DM_DRAW_USE_COLORS;
 	int gridFaces = gridSize - 1, totface;
 
 	/* currently unused -- each original face is handled separately */
@@ -2142,7 +2143,8 @@
 
 		origIndex = GET_INT_FROM_POINTER(ccgSubSurf_getFaceFaceHandle(f));
 
-		if(faceFlags) drawSmooth = (faceFlags[origIndex].flag & ME_SMOOTH);
+		if(flag & DM_DRAW_ALWAYS_SMOOTH) drawSmooth = 1;
+		else if(faceFlags) drawSmooth = (faceFlags[origIndex].flag & ME_SMOOTH);
 		else drawSmooth = 1;
 
 		if(mcol) {
@@ -2156,7 +2158,7 @@
 			if(index == ORIGINDEX_NONE)
 				draw= setMaterial(faceFlags ? faceFlags[origIndex].mat_nr + 1: 1, NULL); /* XXX, no faceFlags no material */
 			else if (setDrawOptions)
-				draw= setDrawOptions(userData, index, &drawSmooth);
+				draw= setDrawOptions(userData, index);
 
 			if (draw) {
 				if (draw==2) {

Modified: trunk/blender/source/blender/editors/space_view3d/drawmesh.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawmesh.c	2012-03-07 12:30:29 UTC (rev 44700)
+++ trunk/blender/source/blender/editors/space_view3d/drawmesh.c	2012-03-07 12:48:52 UTC (rev 44701)
@@ -576,7 +576,7 @@
 	}
 }
 
-static int wpaint__setSolidDrawOptions_material(void *userData, int index, int *drawSmooth_r)
+static int wpaint__setSolidDrawOptions_material(void *userData, int index)
 {
 	Mesh *me = (Mesh*)userData;
 
@@ -587,17 +587,15 @@
 		}
 	}
 
-	*drawSmooth_r = 1;
 	return 1;
 }
 
 /* when face select is on, use face hidden flag */
-static int wpaint__setSolidDrawOptions_facemask(void *userData, int index, int *drawSmooth_r)
+static int wpaint__setSolidDrawOptions_facemask(void *userData, int index)
 {
 	Mesh *me = (Mesh*)userData;
 	MPoly *mp = &me->mpoly[index];
 	if (mp->flag & ME_HIDE) return 0;
-	*drawSmooth_r = 1;
 	return 1;
 }
 
@@ -783,7 +781,8 @@
 	}
 	else if (draw_flags & DRAW_FACE_SELECT) {
 		if (ob->mode & OB_MODE_WEIGHT_PAINT)
-			dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions_facemask, GPU_enable_material, NULL, me, 1);
+			dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions_facemask, GPU_enable_material, NULL, me,
+								DM_DRAW_USE_COLORS | DM_DRAW_ALWAYS_SMOOTH);
 		else
 			dm->drawMappedFacesTex(dm, me->mpoly ? draw_tface_mapped__set_draw : NULL, NULL, me);
 	}
@@ -940,10 +939,8 @@
 
 	if (ob->mode & OB_MODE_WEIGHT_PAINT) {
 		/* weight paint mode exception */
-		int useColors= 1;
-
 		dm->drawMappedFaces(dm, wpaint__setSolidDrawOptions_material,
-			GPU_enable_material, NULL, ob->data, useColors);
+			GPU_enable_material, NULL, ob->data, DM_DRAW_USE_COLORS | DM_DRAW_ALWAYS_SMOOTH);
 	}
 	else {
 		Mesh *me= ob->data;

Modified: trunk/blender/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawobject.c	2012-03-07 12:30:29 UTC (rev 44700)
+++ trunk/blender/source/blender/editors/space_view3d/drawobject.c	2012-03-07 12:48:52 UTC (rev 44701)
@@ -2482,7 +2482,7 @@
 
 	/* Draw faces with color set based on selection
 	 * return 2 for the active face so it renders with stipple enabled */
-static int draw_dm_faces_sel__setDrawOptions(void *userData, int index, int *UNUSED(drawSmooth_r))
+static int draw_dm_faces_sel__setDrawOptions(void *userData, int index)
 {
 	drawDMFacesSel_userData * data = userData;
 	BMFace *efa = EDBM_get_face_for_index(data->em, index);
@@ -2965,7 +2965,7 @@
 	}
 }
 
-static int draw_em_fancy__setFaceOpts(void *userData, int index, int *UNUSED(drawSmooth_r))
+static int draw_em_fancy__setFaceOpts(void *userData, int index)
 {
 	BMFace *efa = EDBM_get_face_for_index(userData, index);
 
@@ -3189,12 +3189,6 @@
 	}
 }
 
-static int wpaint__setSolidDrawOptions(void *UNUSED(userData), int UNUSED(index), int *drawSmooth_r)
-{
-	*drawSmooth_r = 1;
-	return 1;
-}
-
 static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D *rv3d, Base *base, int dt, int flag)
 {
 	Object *ob= base->object;
@@ -3283,7 +3277,8 @@

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list