[Bf-blender-cvs] [6c12039] soc-2013-paint: Change derived mesh material calculation slightly to make it more straightforward (access materials by mface->mat_nr)

Antony Riakiotakis noreply at git.blender.org
Tue Apr 22 12:39:58 CEST 2014


Commit: 6c12039c1c971963a10d932d2f9d43748545f92b
Author: Antony Riakiotakis
Date:   Sun Apr 20 20:12:25 2014 +0300
https://developer.blender.org/rB6c12039c1c971963a10d932d2f9d43748545f92b

Change derived mesh material calculation slightly to make it more
straightforward (access materials by mface->mat_nr)

===================================================================

M	source/blender/blenkernel/intern/DerivedMesh.c
M	source/blender/blenkernel/intern/cdderivedmesh.c
M	source/blender/blenkernel/intern/subsurf_ccg.c
M	source/blender/gpu/intern/gpu_buffers.c

===================================================================

diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index b0c2e2f..967eac1 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -506,8 +506,8 @@ void DM_update_materials(DerivedMesh *dm, Object *ob)
 
 	dm->mat = MEM_callocN(totmat * sizeof(*dm->mat), "DerivedMesh.mat");
 
-	for (i = 1; i < totmat; i++) {
-		dm->mat[i] = give_current_material(ob, i);
+	for (i = 0; i < totmat - 1; i++) {
+		dm->mat[i] = give_current_material(ob, i + 1);
 	}
 }
 
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index 4d6763c..69483a3 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -710,7 +710,7 @@ static void cdDM_drawFacesTex_common(DerivedMesh *dm,
 			if (uvflag & DM_DRAW_USE_TEXPAINT_UV) {
 				if (mf->mat_nr != mat_nr_cache) {
 					if (dm->totmat > 1) {
-						int mat_i = mf->mat_nr + 1;
+						int mat_i = mf->mat_nr;
 						if (dm->mat[mat_i] && dm->mat[mat_i]->texpaintslot && dm->mat[mat_i]->texpaintslot->uvname[0])
 							tf_base = CustomData_get_layer_named(&dm->faceData, CD_MTFACE, dm->mat[mat_i]->texpaintslot->uvname);
 						else
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index a4ee12c..31a7314 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -2305,9 +2305,8 @@ static void ccgDM_drawFacesTex_common(DerivedMesh *dm,
 		if (flag & DM_DRAW_USE_TEXPAINT_UV) {
 			if (mat_nr != mat_nr_cache) {
 				if (dm->totmat > 1) {
-					int mat_i = mat_nr + 1;
-					if (dm->mat[mat_i] && dm->mat[mat_i]->texpaintslot && dm->mat[mat_i]->texpaintslot->uvname[0])
-						tf_base = CustomData_get_layer_named(&dm->faceData, CD_MTFACE, dm->mat[mat_i]->texpaintslot->uvname);
+					if (dm->mat[mat_nr] && dm->mat[mat_nr]->texpaintslot && dm->mat[mat_nr]->texpaintslot->uvname[0])
+						tf_base = CustomData_get_layer_named(&dm->faceData, CD_MTFACE, dm->mat[mat_nr]->texpaintslot->uvname);
 					else
 						tf_base = CustomData_get_layer(&dm->faceData, CD_MTFACE);
 				}
diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c
index 9ca1954..e5ca532 100644
--- a/source/blender/gpu/intern/gpu_buffers.c
+++ b/source/blender/gpu/intern/gpu_buffers.c
@@ -852,18 +852,11 @@ static void GPU_buffer_copy_uv_texpaint(DerivedMesh *dm, float *varray, int *ind
 	f = dm->getTessFaceArray(dm);
 	mtface_base = MEM_mallocN(totmaterial * sizeof(*mtface_base), "texslots");
 
-	if (totmaterial > 1) {
-		for (i = 0; i < totmaterial - 1; i++) {
-			int mat_i = i + 1;
-			if (dm->mat[mat_i] && dm->mat[mat_i]->texpaintslot && dm->mat[mat_i]->texpaintslot->uvname[0])
-				mtface_base[i] = CustomData_get_layer_named(&dm->faceData, CD_MTFACE, dm->mat[mat_i]->texpaintslot->uvname);
-			else
-				mtface_base[i] = CustomData_get_layer(&dm->faceData, CD_MTFACE);
-		}
-	}
-	else {
-		/* Only default material, use active */
-		mtface_base[0] = CustomData_get_layer(&dm->faceData, CD_MTFACE);
+	for (i = 0; i < totmaterial; i++) {
+		if (dm->mat[i] && dm->mat[i]->texpaintslot && dm->mat[i]->texpaintslot->uvname[0])
+			mtface_base[i] = CustomData_get_layer_named(&dm->faceData, CD_MTFACE, dm->mat[i]->texpaintslot->uvname);
+		else
+			mtface_base[i] = CustomData_get_layer(&dm->faceData, CD_MTFACE);
 	}
 
 	totface = dm->getNumTessFaces(dm);




More information about the Bf-blender-cvs mailing list