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) {


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to