[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35998] trunk/blender/source/blender: Bugfix #26761

Ton Roosendaal ton at blender.org
Mon Apr 4 15:47:34 CEST 2011


Revision: 35998
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35998
Author:   ton
Date:     2011-04-04 13:47:34 +0000 (Mon, 04 Apr 2011)
Log Message:
-----------
Bugfix #26761

Texture preview render now doesn't increment/decrement material->texture
user counts anymore. Blenders library.c code could use some overhaul
once to support data relinkage and copying around better. :)

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/material.c
    trunk/blender/source/blender/editors/render/render_preview.c

Modified: trunk/blender/source/blender/blenkernel/intern/material.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/material.c	2011-04-04 13:47:28 UTC (rev 35997)
+++ trunk/blender/source/blender/blenkernel/intern/material.c	2011-04-04 13:47:34 UTC (rev 35998)
@@ -245,12 +245,11 @@
 	man= copy_libblock(ma);
 	BLI_remlink(&G.main->mat, man);
 
+	/* no increment for texture ID users, in previewrender.c it prevents decrement */
 	for(a=0; a<MAX_MTEX; a++) {
 		if(ma->mtex[a]) {
 			man->mtex[a]= MEM_mallocN(sizeof(MTex), "copymaterial");
 			memcpy(man->mtex[a], ma->mtex[a], sizeof(MTex));
-			/* free_material decrements! */
-			id_us_plus((ID *)man->mtex[a]->tex);
 		}
 	}
 	

Modified: trunk/blender/source/blender/editors/render/render_preview.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_preview.c	2011-04-04 13:47:28 UTC (rev 35997)
+++ trunk/blender/source/blender/editors/render/render_preview.c	2011-04-04 13:47:34 UTC (rev 35998)
@@ -1117,11 +1117,20 @@
 	
 	if(sp->matcopy) {
 		struct IDProperty *properties;
+		int a;
+		
 		/* node previews */
 		shader_preview_updatejob(sp);
 		
 		/* get rid of copied material */
 		BLI_remlink(&pr_main->mat, sp->matcopy);
+		
+		/* free_material decrements texture, prevent this. hack alert! */
+		for(a=0; a<MAX_MTEX; a++) {
+			MTex *mtex= sp->matcopy->mtex[a];
+			if(mtex && mtex->tex) mtex->tex= NULL;
+		}
+		
 		free_material(sp->matcopy);
 
 		properties= IDP_GetProperties((ID *)sp->matcopy, FALSE);




More information about the Bf-blender-cvs mailing list