[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16434] trunk/blender/source/blender/ render/intern/source:

Brecht Van Lommel brechtvanlommel at pandora.be
Tue Sep 9 16:17:28 CEST 2008


Revision: 16434
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16434
Author:   blendix
Date:     2008-09-09 16:16:54 +0200 (Tue, 09 Sep 2008)

Log Message:
-----------

Fix for bug #17580: crash rendering instanced objects with
halo material attach to the object instead of the mesh.

Also for bug #13489: avoid a crash rendering with invalid
active vcol layer, most likely caused by a bug that was
already fixed.

Modified Paths:
--------------
    trunk/blender/source/blender/render/intern/source/convertblender.c
    trunk/blender/source/blender/render/intern/source/renderdatabase.c

Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c	2008-09-09 13:35:38 UTC (rev 16433)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c	2008-09-09 14:16:54 UTC (rev 16434)
@@ -4578,17 +4578,19 @@
 static int allow_render_dupli_instance(Render *re, DupliObject *dob, Object *obd)
 {
 	ParticleSystem *psys;
-	Material ***material;
+	Material *ma;
 	short a, *totmaterial;
 
-	/* don't allow objects with halos */
+	/* don't allow objects with halos. we need to have
+	 * all halo's to sort them globally in advance */
 	totmaterial= give_totcolp(obd);
-	material= give_matarar(obd);
 
-	if(totmaterial && material) {
-		for(a= 0; a<*totmaterial; a++)
-			if((*material)[a] && (*material)[a]->mode & MA_HALO)
+	if(totmaterial) {
+		for(a= 0; a<*totmaterial; a++) {
+			ma= give_current_material(obd, a);
+			if(ma && (ma->mode & MA_HALO))
 				return 0;
+		}
 	}
 
 	for(psys=obd->particlesystem.first; psys; psys=psys->next)

Modified: trunk/blender/source/blender/render/intern/source/renderdatabase.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/renderdatabase.c	2008-09-09 13:35:38 UTC (rev 16433)
+++ trunk/blender/source/blender/render/intern/source/renderdatabase.c	2008-09-09 14:16:54 UTC (rev 16434)
@@ -483,16 +483,16 @@
 	   DerivedMesh which stores the layers is freed */
 	
 	CustomDataLayer *layer;
-	int numlayers, i, mtfn, mcn;
+	int numtf = 0, numcol = 0, i, mtfn, mcn;
 
 	if (CustomData_has_layer(data, CD_MTFACE)) {
-		numlayers= CustomData_number_of_layers(data, CD_MTFACE);
-		obr->mtface= MEM_callocN(sizeof(*obr->mtface)*numlayers, "mtfacenames");
+		numtf= CustomData_number_of_layers(data, CD_MTFACE);
+		obr->mtface= MEM_callocN(sizeof(*obr->mtface)*numtf, "mtfacenames");
 	}
 
 	if (CustomData_has_layer(data, CD_MCOL)) {
-		numlayers= CustomData_number_of_layers(data, CD_MCOL);
-		obr->mcol= MEM_callocN(sizeof(*obr->mcol)*numlayers, "mcolnames");
+		numcol= CustomData_number_of_layers(data, CD_MCOL);
+		obr->mcol= MEM_callocN(sizeof(*obr->mcol)*numcol, "mcolnames");
 	}
 
 	for (i=0, mtfn=0, mcn=0; i < data->totlayer; i++) {
@@ -500,12 +500,12 @@
 
 		if (layer->type == CD_MTFACE) {
 			strcpy(obr->mtface[mtfn++], layer->name);
-			obr->actmtface= layer->active_rnd;
+			obr->actmtface= CLAMPIS(layer->active_rnd, 0, numtf);
 			obr->bakemtface= layer->active;
 		}
 		else if (layer->type == CD_MCOL) {
 			strcpy(obr->mcol[mcn++], layer->name);
-			obr->actmcol= layer->active_rnd;
+			obr->actmcol= CLAMPIS(layer->active_rnd, 0, numcol);
 		}
 	}
 }





More information about the Bf-blender-cvs mailing list