[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42319] trunk/blender/source/blender/ editors/space_view3d: Fixed issue with multiple textures and editmode when VBOs are enabled

Sergey Sharybin sergey.vfx at gmail.com
Thu Dec 1 19:26:57 CET 2011


Revision: 42319
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42319
Author:   nazgul
Date:     2011-12-01 18:26:57 +0000 (Thu, 01 Dec 2011)
Log Message:
-----------
Fixed issue with multiple textures and editmode when VBOs are enabled

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

Modified: trunk/blender/source/blender/editors/space_view3d/drawmesh.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawmesh.c	2011-12-01 18:26:48 UTC (rev 42318)
+++ trunk/blender/source/blender/editors/space_view3d/drawmesh.c	2011-12-01 18:26:57 UTC (rev 42319)
@@ -513,7 +513,7 @@
 
 static int draw_em_tf_mapped__set_draw(void *userData, int index)
 {
-	struct {EditMesh *em; short has_mcol; short has_mtface;} *data = userData;
+	struct {DerivedMesh *dm; EditMesh *em; short has_mcol; short has_mtface;} *data = userData;
 	EditMesh *em = data->em;
 	EditFace *efa= EM_get_face_for_index(index);
 	MTFace *tface;
@@ -644,6 +644,21 @@
 	return 1;
 }
 
+static int compareDrawOptionsEm(void *userData, int cur_index, int next_index)
+{
+	struct {DerivedMesh *dm; EditMesh *em; short has_mcol; short has_mtface;} *data= userData;
+	MFace *mf = DM_get_face_data_layer(data->dm, CD_MFACE);
+	MTFace *tf = DM_get_face_data_layer(data->dm, CD_MTFACE);
+
+	if(mf && mf[cur_index].mat_nr != mf[next_index].mat_nr)
+		return 0;
+
+	if(tf && tf[cur_index].tpage != tf[next_index].tpage)
+		return 0;
+
+	return 1;
+}
+
 void draw_mesh_textured_old(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, DerivedMesh *dm, int draw_flags)
 {
 	Mesh *me= ob->data;
@@ -658,13 +673,14 @@
 	glColor4f(1.0f,1.0f,1.0f,1.0f);
 
 	if(ob->mode & OB_MODE_EDIT) {
-		struct {EditMesh *em; short has_mcol; short has_mtface;} data;
+		struct {DerivedMesh *dm; EditMesh *em; short has_mcol; short has_mtface;} data;
 
+		data.dm = dm;
 		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, NULL, &data);
+		dm->drawMappedFacesTex(dm, draw_em_tf_mapped__set_draw, compareDrawOptionsEm, &data);
 	}
 	else if(draw_flags & DRAW_FACE_SELECT) {
 		if(ob->mode & OB_MODE_WEIGHT_PAINT)

Modified: trunk/blender/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawobject.c	2011-12-01 18:26:48 UTC (rev 42318)
+++ trunk/blender/source/blender/editors/space_view3d/drawobject.c	2011-12-01 18:26:57 UTC (rev 42319)
@@ -2343,7 +2343,7 @@
 
 static int draw_dm_faces_sel__compareDrawOptions(void *userData, int index, int next_index)
 {
-	struct { DerivedMesh *dm; unsigned char *cols[3]; EditFace *efa_act; } * data = userData;
+	struct { DerivedMesh *dm; unsigned char *cols[3]; EditFace *efa_act; } *data = userData;
 	int *orig_index= DM_get_face_data_layer(data->dm, CD_ORIGINDEX);
 	EditFace *efa;
 	EditFace *next_efa;




More information about the Bf-blender-cvs mailing list