[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34819] trunk/blender/source/blender: Some more fixes for particle textures:

Janne Karhu jhkarh at gmail.com
Sun Feb 13 13:35:27 CET 2011


Revision: 34819
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=34819
Author:   jhk
Date:     2011-02-13 12:35:26 +0000 (Sun, 13 Feb 2011)
Log Message:
-----------
Some more fixes for particle textures:
* Moving a texture slot didn't keep the moved slot active.
* Copy & paste for particle textures didn't work.
* New textures weren't freed properly.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/particle.c
    trunk/blender/source/blender/blenkernel/intern/texture.c
    trunk/blender/source/blender/editors/render/render_shading.c

Modified: trunk/blender/source/blender/blenkernel/intern/particle.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle.c	2011-02-13 11:45:04 UTC (rev 34818)
+++ trunk/blender/source/blender/blenkernel/intern/particle.c	2011-02-13 12:35:26 UTC (rev 34819)
@@ -366,6 +366,8 @@
 
 void psys_free_settings(ParticleSettings *part)
 {
+	MTex *mtex;
+	int a;
 	BKE_free_animdata(&part->id);
 	free_partdeflect(part->pd);
 	free_partdeflect(part->pd2);
@@ -377,6 +379,12 @@
 
 	boid_free_settings(part->boids);
 	fluid_free_settings(part->fluid);
+
+	for(a=0; a<MAX_MTEX; a++) {
+		mtex= part->mtex[a];
+		if(mtex && mtex->tex) mtex->tex->id.us--;
+		if(mtex) MEM_freeN(mtex);
+	}
 }
 
 void free_hair(Object *UNUSED(ob), ParticleSystem *psys, int dynamics)

Modified: trunk/blender/source/blender/blenkernel/intern/texture.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/texture.c	2011-02-13 11:45:04 UTC (rev 34818)
+++ trunk/blender/source/blender/blenkernel/intern/texture.c	2011-02-13 12:35:26 UTC (rev 34819)
@@ -779,6 +779,7 @@
 	World *wrld;
 	Lamp *la;
 	Brush *br;
+	ParticleSettings *pa;
 	int a, local=0, lib=0;
 
 	/* - only lib users: do nothing
@@ -841,6 +842,16 @@
 		}
 		br= br->id.next;
 	}
+	pa= bmain->particle.first;
+	while(pa) {
+		for(a=0; a<MAX_MTEX; a++) {
+			if(pa->mtex[a] && pa->mtex[a]->tex==tex) {
+				if(pa->id.lib) lib= 1;
+				else local= 1;
+			}
+		}
+		pa= pa->id.next;
+	}
 	
 	if(local && lib==0) {
 		tex->id.lib= NULL;
@@ -901,6 +912,19 @@
 			}
 			br= br->id.next;
 		}
+		pa= bmain->particle.first;
+		while(pa) {
+			for(a=0; a<MAX_MTEX; a++) {
+				if(pa->mtex[a] && pa->mtex[a]->tex==tex) {
+					if(pa->id.lib==NULL) {
+						pa->mtex[a]->tex= texn;
+						texn->id.us++;
+						tex->id.us--;
+					}
+				}
+			}
+			pa= pa->id.next;
+		}
 	}
 }
 
@@ -1079,6 +1103,9 @@
 	case ID_LA:
 		((Lamp *)id)->texact= act;
 		break;
+	case ID_PA:
+		((ParticleSettings *)id)->texact= act;
+		break;
 	}
 }
 

Modified: trunk/blender/source/blender/editors/render/render_shading.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_shading.c	2011-02-13 11:45:04 UTC (rev 34818)
+++ trunk/blender/source/blender/editors/render/render_shading.c	2011-02-13 12:35:26 UTC (rev 34819)
@@ -34,6 +34,7 @@
 #include "DNA_material_types.h"
 #include "DNA_node_types.h"
 #include "DNA_object_types.h"
+#include "DNA_particle_types.h"
 #include "DNA_scene_types.h"
 #include "DNA_space_types.h"
 #include "DNA_world_types.h"
@@ -1110,6 +1111,9 @@
 			mtex= &(((World *)id)->mtex[(int)((World *)id)->texact]);
 			// mtex= wrld->mtex[(int)wrld->texact]; // TODO
 			break;
+		case ID_PA:
+			mtex= &(((ParticleSettings *)id)->mtex[(int)((ParticleSettings *)id)->texact]);
+			break;
 	}
 	
 	if(mtex && *mtex) {
@@ -1140,6 +1144,9 @@
 			mtex= &(((World *)id)->mtex[(int)((World *)id)->texact]);
 			// mtex= wrld->mtex[(int)wrld->texact]; // TODO
 			break;
+		case ID_PA:
+			mtex= &(((ParticleSettings *)id)->mtex[(int)((ParticleSettings *)id)->texact]);
+			break;
 	}
 	
 	if(mtex) {
@@ -1204,6 +1211,7 @@
 		Material *ma= CTX_data_pointer_get_type(C, "material", &RNA_Material).data;
 		Lamp *la= CTX_data_pointer_get_type(C, "lamp", &RNA_Lamp).data;
 		World *wo= CTX_data_pointer_get_type(C, "world", &RNA_World).data;
+		ParticleSystem *psys= CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem).data;
 		
 		if (ma)
 			id = &ma->id;
@@ -1211,6 +1219,8 @@
 			id = &la->id;
 		else if (wo)
 			id = &wo->id;
+		else if (psys)
+			id = &psys->part->id;
 		
 		if (id==NULL)
 			return OPERATOR_CANCELLED;




More information about the Bf-blender-cvs mailing list