[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40508] trunk/blender/source/blender: some speedup for drawing mesh in texture mode.

Campbell Barton ideasman42 at gmail.com
Fri Sep 23 20:29:45 CEST 2011


Revision: 40508
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40508
Author:   campbellbarton
Date:     2011-09-23 18:29:45 +0000 (Fri, 23 Sep 2011)
Log Message:
-----------
some speedup for drawing mesh in texture mode.
- only pass if the mesh has vertex colors to drawParams() rather then the mcol its self, this saves a lookup on the color.
- drawing textures in editmode with no vertex colors would still lookup vertex colors on each face, instead cache this info for all faces.

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

Modified: trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h	2011-09-23 17:44:57 UTC (rev 40507)
+++ trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h	2011-09-23 18:29:45 UTC (rev 40508)
@@ -257,7 +257,7 @@
 	 */
 	void (*drawFacesTex)(DerivedMesh *dm,
 						 int (*setDrawOptions)(struct MTFace *tface,
-						 struct MCol *mcol, int matnr));
+						 int has_mcol, int matnr));
 
 	/* Draw all faces with GLSL materials
 	 *  o setMaterial is called for every different material nr

Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2011-09-23 17:44:57 UTC (rev 40507)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2011-09-23 18:29:45 UTC (rev 40508)
@@ -799,7 +799,7 @@
 }
 
 static void emDM_drawFacesTex_common(DerivedMesh *dm,
-			   int (*drawParams)(MTFace *tface, MCol *mcol, int matnr),
+			   int (*drawParams)(MTFace *tface, int has_mcol, int matnr),
 			   int (*drawParamsMapped)(void *userData, int index),
 			   void *userData) 
 {
@@ -827,7 +827,7 @@
 			int flag;
 
 			if(drawParams)
-				flag= drawParams(tf, mcol, efa->mat_nr);
+				flag= drawParams(tf, (mcol != NULL), efa->mat_nr);
 			else if(drawParamsMapped)
 				flag= drawParamsMapped(userData, i);
 			else
@@ -900,7 +900,7 @@
 			int flag;
 
 			if(drawParams)
-				flag= drawParams(tf, mcol, efa->mat_nr);
+				flag= drawParams(tf, (mcol != NULL), efa->mat_nr);
 			else if(drawParamsMapped)
 				flag= drawParamsMapped(userData, i);
 			else
@@ -966,7 +966,7 @@
 	}
 }
 
-static void emDM_drawFacesTex(DerivedMesh *dm, int (*setDrawOptions)(MTFace *tface, MCol *mcol, int matnr))
+static void emDM_drawFacesTex(DerivedMesh *dm, int (*setDrawOptions)(MTFace *tface, int has_mcol, int matnr))
 {
 	emDM_drawFacesTex_common(dm, setDrawOptions, NULL, NULL);
 }

Modified: trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2011-09-23 17:44:57 UTC (rev 40507)
+++ trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2011-09-23 18:29:45 UTC (rev 40508)
@@ -647,7 +647,7 @@
 }
 
 static void cdDM_drawFacesTex_common(DerivedMesh *dm,
-			   int (*drawParams)(MTFace *tface, MCol *mcol, int matnr),
+			   int (*drawParams)(MTFace *tface, int has_mcol, int matnr),
 			   int (*drawParamsMapped)(void *userData, int index),
 			   void *userData) 
 {
@@ -673,7 +673,7 @@
 			unsigned char *cp = NULL;
 
 			if(drawParams) {
-				flag = drawParams(tf? &tf[i]: NULL, mcol? &mcol[i*4]: NULL, mf->mat_nr);
+				flag = drawParams(tf? &tf[i]: NULL, (mcol != NULL), mf->mat_nr);
 			}
 			else {
 				if(index) {
@@ -792,7 +792,7 @@
 				int flag = 1;
 
 				if(drawParams) {
-					flag = drawParams(tf? &tf[actualFace]: NULL, mcol? &mcol[actualFace*4]: NULL, mf[actualFace].mat_nr);
+					flag = drawParams(tf? &tf[actualFace]: NULL, (mcol != NULL), mf[actualFace].mat_nr);
 				}
 				else {
 					if(index) {
@@ -835,7 +835,7 @@
 	}
 }
 
-static void cdDM_drawFacesTex(DerivedMesh *dm, int (*setDrawOptions)(MTFace *tface, MCol *mcol, int matnr))
+static void cdDM_drawFacesTex(DerivedMesh *dm, int (*setDrawOptions)(MTFace *tface, int has_mcol, int matnr))
 {
 	cdDM_drawFacesTex_common(dm, setDrawOptions, NULL, NULL);
 }

Modified: trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c	2011-09-23 17:44:57 UTC (rev 40507)
+++ trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c	2011-09-23 18:29:45 UTC (rev 40508)
@@ -1583,7 +1583,7 @@
 }
 
 static void ccgDM_drawFacesTex_common(DerivedMesh *dm,
-	int (*drawParams)(MTFace *tface, MCol *mcol, int matnr),
+	int (*drawParams)(MTFace *tface, int has_mcol, int matnr),
 	int (*drawParamsMapped)(void *userData, int index),
 	void *userData) 
 {
@@ -1619,7 +1619,7 @@
 		}
 
 		if(drawParams)
-			flag = drawParams(tf, mcol, mat_nr);
+			flag = drawParams(tf, (mcol != NULL), mat_nr);
 		else if (index != ORIGINDEX_NONE)
 			flag= (drawParamsMapped)? drawParamsMapped(userData, index): 1;
 		else
@@ -1722,7 +1722,7 @@
 	}
 }
 
-static void ccgDM_drawFacesTex(DerivedMesh *dm, int (*setDrawOptions)(MTFace *tface, MCol *mcol, int matnr))
+static void ccgDM_drawFacesTex(DerivedMesh *dm, int (*setDrawOptions)(MTFace *tface, int has_mcol, int matnr))
 {
 	ccgDM_drawFacesTex_common(dm, setDrawOptions, NULL, NULL);
 }

Modified: trunk/blender/source/blender/editors/space_view3d/drawmesh.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawmesh.c	2011-09-23 17:44:57 UTC (rev 40507)
+++ trunk/blender/source/blender/editors/space_view3d/drawmesh.c	2011-09-23 18:29:45 UTC (rev 40508)
@@ -362,7 +362,7 @@
 	glPopMatrix();
 }
 
-static int draw_tface__set_draw_legacy(MTFace *tface, MCol *mcol, int matnr)
+static int draw_tface__set_draw_legacy(MTFace *tface, int has_mcol, int matnr)
 {
 	Material *ma= give_current_material(Gtexdraw.ob, matnr+1);
 	int validtexture=0;
@@ -377,7 +377,7 @@
 	} else if (ma && ma->shade_flag&MA_OBCOLOR) {
 		glColor3ubv(Gtexdraw.obcol);
 		return 2; /* Don't set color */
-	} else if (!mcol) {
+	} else if (!has_mcol) {
 		if (tface) glColor3f(1.0, 1.0, 1.0);
 		else {
 			if(ma) {
@@ -394,7 +394,7 @@
 		return 1; /* Set color from mcol */
 	}
 }
-static int draw_tface__set_draw(MTFace *tface, MCol *mcol, int matnr)
+static int draw_tface__set_draw(MTFace *tface, int has_mcol, int matnr)
 {
 	Material *ma= give_current_material(Gtexdraw.ob, matnr+1);
 
@@ -404,7 +404,7 @@
 		return 2; /* Don't set color */
 	} else if (tface && tface->mode&TF_OBCOL) {
 		return 2; /* Don't set color */
-	} else if (!mcol) {
+	} else if (!has_mcol) {
 		return 1; /* Don't set color */
 	} else {
 		return 1; /* Set color from mcol */
@@ -491,28 +491,26 @@
 	Mesh *me = (Mesh*)userData;
 	MTFace *tface = (me->mtface)? &me->mtface[index]: NULL;
 	MFace *mface = &me->mface[index];
-	MCol *mcol = (me->mcol)? &me->mcol[index]: NULL;
 	const int matnr = mface->mat_nr;
 	if (mface->flag & ME_HIDE) return 0;
-	return draw_tface__set_draw(tface, mcol, matnr);
+	return draw_tface__set_draw(tface, (me->mcol != NULL), matnr);
 }
 
 static int draw_em_tf_mapped__set_draw(void *userData, int index)
 {
-	EditMesh *em = userData;
+	struct {EditMesh *em; short has_mcol; short has_mtface;} *data = userData;
+	EditMesh *em = data->em;
 	EditFace *efa= EM_get_face_for_index(index);
 	MTFace *tface;
-	MCol *mcol;
 	int matnr;
 
 	if (efa->h)
 		return 0;
 
-	tface = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
-	mcol = CustomData_em_get(&em->fdata, efa->data, CD_MCOL);
+	tface = data->has_mtface ? CustomData_em_get(&em->fdata, efa->data, CD_MTFACE) : NULL;
 	matnr = efa->mat_nr;
 
-	return draw_tface__set_draw_legacy(tface, mcol, matnr);
+	return draw_tface__set_draw_legacy(tface, data->has_mcol, matnr);
 }
 
 static int wpaint__setSolidDrawOptions(void *userData, int index, int *drawSmooth_r)
@@ -632,7 +630,13 @@
 	glColor4f(1.0f,1.0f,1.0f,1.0f);
 
 	if(ob->mode & OB_MODE_EDIT) {
-		dm->drawMappedFacesTex(dm, draw_em_tf_mapped__set_draw, me->edit_mesh);
+		struct {EditMesh *em; short has_mcol; short has_mtface;} data;
+
+		data.em= me->edit_mesh;
+		data.has_mcol= CustomData_has_layer(&me->edit_mesh->fdata, CD_MCOL);
+		data.has_mtface= CustomData_has_layer(&me->edit_mesh->fdata, CD_MTFACE);
+
+		dm->drawMappedFacesTex(dm, draw_em_tf_mapped__set_draw, &data);
 	}
 	else if(faceselect) {
 		if(ob->mode & OB_MODE_WEIGHT_PAINT)




More information about the Bf-blender-cvs mailing list