[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57764] trunk/blender/source/blender/ editors/space_view3d/drawmesh.c: Fix #34837 Texture Painting using Face Selection Mask fails to show

Antony Riakiotakis kalast at gmail.com
Wed Jun 26 12:14:30 CEST 2013


Revision: 57764
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57764
Author:   psy-fi
Date:     2013-06-26 10:14:30 +0000 (Wed, 26 Jun 2013)
Log Message:
-----------
Fix #34837 Texture Painting using Face Selection Mask fails to show
texture if more than 1 texture is used

The problem here is that no flushing is done when the texface image
changes between rendered triangles. Added a compare function and
slightly modified the draw_tface_mapped__set_draw callback to compliant
with the new user data.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_view3d/drawmesh.c

Modified: trunk/blender/source/blender/editors/space_view3d/drawmesh.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawmesh.c	2013-06-26 10:05:53 UTC (rev 57763)
+++ trunk/blender/source/blender/editors/space_view3d/drawmesh.c	2013-06-26 10:14:30 UTC (rev 57764)
@@ -89,6 +89,7 @@
 } drawEMTFMapped_userData;
 
 typedef struct drawTFace_userData {
+	Mesh *me;
 	MFace *mf;
 	MTFace *tf;
 } drawTFace_userData;
@@ -538,7 +539,7 @@
 
 static DMDrawOption draw_tface_mapped__set_draw(void *userData, int index)
 {
-	Mesh *me = (Mesh *)userData;
+	Mesh *me = ((drawTFace_userData *)userData)->me;
 
 	/* array checked for NULL before calling */
 	MPoly *mpoly = &me->mpoly[index];
@@ -735,6 +736,7 @@
 	return 1;
 }
 
+
 static int compareDrawOptionsEm(void *userData, int cur_index, int next_index)
 {
 	drawEMTFMapped_userData *data = userData;
@@ -777,8 +779,14 @@
 		if (ob->mode & OB_MODE_WEIGHT_PAINT)
 			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);
+		else {
+			drawTFace_userData userData;
+
+			userData.mf = DM_get_tessface_data_layer(dm, CD_MFACE);
+			userData.tf = DM_get_tessface_data_layer(dm, CD_MTFACE);
+			userData.me = me;
+			dm->drawMappedFacesTex(dm, me->mpoly ? draw_tface_mapped__set_draw : NULL, compareDrawOptions, &userData);
+		}
 	}
 	else {
 		if (GPU_buffer_legacy(dm)) {
@@ -794,6 +802,7 @@
 
 			userData.mf = DM_get_tessface_data_layer(dm, CD_MFACE);
 			userData.tf = DM_get_tessface_data_layer(dm, CD_MTFACE);
+			userData.me = NULL;
 
 			dm->drawFacesTex(dm, draw_tface__set_draw, compareDrawOptions, &userData);
 		}




More information about the Bf-blender-cvs mailing list