[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28174] trunk/blender/source/blender: Fix for [#21983] Entering Particle Edit mode crash

Janne Karhu jhkarh at gmail.com
Tue Apr 13 21:44:17 CEST 2010


Revision: 28174
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28174
Author:   jhk
Date:     2010-04-13 21:44:16 +0200 (Tue, 13 Apr 2010)

Log Message:
-----------
Fix for [#21983] Entering Particle Edit mode crash

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_pointcache.h
    trunk/blender/source/blender/blenkernel/intern/pointcache.c
    trunk/blender/source/blender/editors/physics/particle_edit.c

Modified: trunk/blender/source/blender/blenkernel/BKE_pointcache.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_pointcache.h	2010-04-13 19:39:28 UTC (rev 28173)
+++ trunk/blender/source/blender/blenkernel/BKE_pointcache.h	2010-04-13 19:44:16 UTC (rev 28174)
@@ -258,6 +258,7 @@
 /* Memory cache read/write helpers. */
 void BKE_ptcache_mem_init_pointers(struct PTCacheMem *pm);
 void BKE_ptcache_mem_incr_pointers(struct PTCacheMem *pm);
+int BKE_ptcache_mem_seek_pointers(int point_index, struct PTCacheMem *pm);
 
 /* Copy a specific data type from cache data to point data. */
 void	BKE_ptcache_data_get(void **data, int type, int index, void *to);

Modified: trunk/blender/source/blender/blenkernel/intern/pointcache.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/pointcache.c	2010-04-13 19:39:28 UTC (rev 28173)
+++ trunk/blender/source/blender/blenkernel/intern/pointcache.c	2010-04-13 19:44:16 UTC (rev 28174)
@@ -1328,7 +1328,7 @@
 			pm->cur[i] = (char*)pm->cur[i] + ptcache_data_size[i];
 	}
 }
-static int BKE_ptcache_mem_seek_pointers(int point_index, PTCacheMem *pm)
+int BKE_ptcache_mem_seek_pointers(int point_index, PTCacheMem *pm)
 {
 	int data_types = pm->data_types;
 	int i, index = pm->index_array ? pm->index_array[point_index] - 1 : point_index;

Modified: trunk/blender/source/blender/editors/physics/particle_edit.c
===================================================================
--- trunk/blender/source/blender/editors/physics/particle_edit.c	2010-04-13 19:39:28 UTC (rev 28173)
+++ trunk/blender/source/blender/editors/physics/particle_edit.c	2010-04-13 19:44:16 UTC (rev 28174)
@@ -3663,6 +3663,8 @@
 		for(; pm; pm=pm->next) {
 			for(i=0; i<BPHYS_TOT_DATA; i++)
 				pm->data[i] = MEM_dupallocN(pm->data[i]);
+
+			pm->index_array = MEM_dupallocN(pm->index_array);
 		}
 	}
 
@@ -3737,6 +3739,8 @@
 			for(i=0; i<BPHYS_TOT_DATA; i++)
 				pm->data[i] = MEM_dupallocN(pm->data[i]);
 
+			pm->index_array = MEM_dupallocN(pm->index_array);
+
 			BKE_ptcache_mem_init_pointers(pm);
 
 			LOOP_POINTS {
@@ -4001,12 +4005,20 @@
 
 				LOOP_POINTS {
 					if(psys) {
-						pa = psys->particles + p;
-						if((pm->next && pm->next->frame < pa->time)
-							|| (pm->prev && pm->prev->frame >= pa->dietime)) {
-								BKE_ptcache_mem_incr_pointers(pm);
+						if(pm->index_array) {
+							if(pm->index_array[p])
+								BKE_ptcache_mem_seek_pointers(p, pm);
+							else
 								continue;
-							}
+						}
+						else {
+							pa = psys->particles + p;
+							if((pm->next && pm->next->frame < pa->time)
+								|| (pm->prev && pm->prev->frame >= pa->dietime)) {
+									BKE_ptcache_mem_incr_pointers(pm);
+									continue;
+								}
+						}
 					}
 
 					if(!point->totkey) {





More information about the Bf-blender-cvs mailing list