Merge branch 'blender-v2.91-release'
This commit is contained in:
commit
056c9de30d
|
@ -324,9 +324,11 @@ int BKE_ptcache_data_size(int data_type);
|
|||
int BKE_ptcache_mem_index_find(struct PTCacheMem *pm, unsigned int index);
|
||||
|
||||
/* Memory cache read/write helpers. */
|
||||
void BKE_ptcache_mem_pointers_init(struct PTCacheMem *pm);
|
||||
void BKE_ptcache_mem_pointers_incr(struct PTCacheMem *pm);
|
||||
int BKE_ptcache_mem_pointers_seek(int point_index, struct PTCacheMem *pm);
|
||||
void BKE_ptcache_mem_pointers_init(struct PTCacheMem *pm, void *cur[BPHYS_TOT_DATA]);
|
||||
void BKE_ptcache_mem_pointers_incr(void *cur[BPHYS_TOT_DATA]);
|
||||
int BKE_ptcache_mem_pointers_seek(int point_index,
|
||||
struct PTCacheMem *pm,
|
||||
void *cur[BPHYS_TOT_DATA]);
|
||||
|
||||
/* Main cache reading call. */
|
||||
int BKE_ptcache_read(PTCacheID *pid, float cfra, bool no_extrapolate_old);
|
||||
|
|
|
@ -1769,27 +1769,27 @@ int BKE_ptcache_mem_index_find(PTCacheMem *pm, unsigned int index)
|
|||
return (index < pm->totpoint ? index : -1);
|
||||
}
|
||||
|
||||
void BKE_ptcache_mem_pointers_init(PTCacheMem *pm)
|
||||
void BKE_ptcache_mem_pointers_init(PTCacheMem *pm, void *cur[BPHYS_TOT_DATA])
|
||||
{
|
||||
int data_types = pm->data_types;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < BPHYS_TOT_DATA; i++) {
|
||||
pm->cur[i] = ((data_types & (1 << i)) ? pm->data[i] : NULL);
|
||||
cur[i] = ((data_types & (1 << i)) ? pm->data[i] : NULL);
|
||||
}
|
||||
}
|
||||
|
||||
void BKE_ptcache_mem_pointers_incr(PTCacheMem *pm)
|
||||
void BKE_ptcache_mem_pointers_incr(void *cur[BPHYS_TOT_DATA])
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < BPHYS_TOT_DATA; i++) {
|
||||
if (pm->cur[i]) {
|
||||
pm->cur[i] = (char *)pm->cur[i] + ptcache_data_size[i];
|
||||
if (cur[i]) {
|
||||
cur[i] = (char *)cur[i] + ptcache_data_size[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
int BKE_ptcache_mem_pointers_seek(int point_index, PTCacheMem *pm)
|
||||
int BKE_ptcache_mem_pointers_seek(int point_index, PTCacheMem *pm, void *cur[BPHYS_TOT_DATA])
|
||||
{
|
||||
int data_types = pm->data_types;
|
||||
int i, index = BKE_ptcache_mem_index_find(pm, point_index);
|
||||
|
@ -1804,7 +1804,7 @@ int BKE_ptcache_mem_pointers_seek(int point_index, PTCacheMem *pm)
|
|||
}
|
||||
|
||||
for (i = 0; i < BPHYS_TOT_DATA; i++) {
|
||||
pm->cur[i] = data_types & (1 << i) ? (char *)pm->data[i] + index * ptcache_data_size[i] : NULL;
|
||||
cur[i] = data_types & (1 << i) ? (char *)pm->data[i] + index * ptcache_data_size[i] : NULL;
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
@ -1974,7 +1974,8 @@ static PTCacheMem *ptcache_disk_frame_to_mem(PTCacheID *pid, int cfra)
|
|||
}
|
||||
}
|
||||
else {
|
||||
BKE_ptcache_mem_pointers_init(pm);
|
||||
void *cur[BPHYS_TOT_DATA];
|
||||
BKE_ptcache_mem_pointers_init(pm, cur);
|
||||
ptcache_file_pointers_init(pf);
|
||||
|
||||
for (i = 0; i < pm->totpoint; i++) {
|
||||
|
@ -1982,8 +1983,8 @@ static PTCacheMem *ptcache_disk_frame_to_mem(PTCacheID *pid, int cfra)
|
|||
error = 1;
|
||||
break;
|
||||
}
|
||||
ptcache_data_copy(pf->cur, pm->cur);
|
||||
BKE_ptcache_mem_pointers_incr(pm);
|
||||
ptcache_data_copy(pf->cur, cur);
|
||||
BKE_ptcache_mem_pointers_incr(cur);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2075,16 +2076,17 @@ static int ptcache_mem_frame_to_disk(PTCacheID *pid, PTCacheMem *pm)
|
|||
}
|
||||
}
|
||||
else {
|
||||
BKE_ptcache_mem_pointers_init(pm);
|
||||
void *cur[BPHYS_TOT_DATA];
|
||||
BKE_ptcache_mem_pointers_init(pm, cur);
|
||||
ptcache_file_pointers_init(pf);
|
||||
|
||||
for (i = 0; i < pm->totpoint; i++) {
|
||||
ptcache_data_copy(pm->cur, pf->cur);
|
||||
ptcache_data_copy(cur, pf->cur);
|
||||
if (!ptcache_file_data_write(pf)) {
|
||||
error = 1;
|
||||
break;
|
||||
}
|
||||
BKE_ptcache_mem_pointers_incr(pm);
|
||||
BKE_ptcache_mem_pointers_incr(cur);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2202,16 +2204,17 @@ static int ptcache_read(PTCacheID *pid, int cfra)
|
|||
}
|
||||
}
|
||||
|
||||
BKE_ptcache_mem_pointers_init(pm);
|
||||
void *cur[BPHYS_TOT_DATA];
|
||||
BKE_ptcache_mem_pointers_init(pm, cur);
|
||||
|
||||
for (i = 0; i < totpoint; i++) {
|
||||
if (pm->data_types & (1 << BPHYS_DATA_INDEX)) {
|
||||
index = pm->cur[BPHYS_DATA_INDEX];
|
||||
index = cur[BPHYS_DATA_INDEX];
|
||||
}
|
||||
|
||||
pid->read_point(*index, pid->calldata, pm->cur, (float)pm->frame, NULL);
|
||||
pid->read_point(*index, pid->calldata, cur, (float)pm->frame, NULL);
|
||||
|
||||
BKE_ptcache_mem_pointers_incr(pm);
|
||||
BKE_ptcache_mem_pointers_incr(cur);
|
||||
}
|
||||
|
||||
if (pid->read_extra_data && pm->extradata.first) {
|
||||
|
@ -2258,16 +2261,16 @@ static int ptcache_interpolate(PTCacheID *pid, float cfra, int cfra1, int cfra2)
|
|||
}
|
||||
}
|
||||
|
||||
BKE_ptcache_mem_pointers_init(pm);
|
||||
void *cur[BPHYS_TOT_DATA];
|
||||
BKE_ptcache_mem_pointers_init(pm, cur);
|
||||
|
||||
for (i = 0; i < totpoint; i++) {
|
||||
if (pm->data_types & (1 << BPHYS_DATA_INDEX)) {
|
||||
index = pm->cur[BPHYS_DATA_INDEX];
|
||||
index = cur[BPHYS_DATA_INDEX];
|
||||
}
|
||||
|
||||
pid->interpolate_point(
|
||||
*index, pid->calldata, pm->cur, cfra, (float)cfra1, (float)cfra2, NULL);
|
||||
BKE_ptcache_mem_pointers_incr(pm);
|
||||
pid->interpolate_point(*index, pid->calldata, cur, cfra, (float)cfra1, (float)cfra2, NULL);
|
||||
BKE_ptcache_mem_pointers_incr(cur);
|
||||
}
|
||||
|
||||
if (pid->interpolate_extra_data && pm->extradata.first) {
|
||||
|
@ -2431,7 +2434,8 @@ static int ptcache_write(PTCacheID *pid, int cfra, int overwrite)
|
|||
pm->data_types = cfra ? pid->data_types : pid->info_types;
|
||||
|
||||
ptcache_data_alloc(pm);
|
||||
BKE_ptcache_mem_pointers_init(pm);
|
||||
void *cur[BPHYS_TOT_DATA];
|
||||
BKE_ptcache_mem_pointers_init(pm, cur);
|
||||
|
||||
if (overwrite) {
|
||||
if (cache->flag & PTCACHE_DISK_CACHE) {
|
||||
|
@ -2450,13 +2454,14 @@ static int ptcache_write(PTCacheID *pid, int cfra, int overwrite)
|
|||
|
||||
if (pid->write_point) {
|
||||
for (i = 0; i < totpoint; i++) {
|
||||
int write = pid->write_point(i, pid->calldata, pm->cur, cfra);
|
||||
int write = pid->write_point(i, pid->calldata, cur, cfra);
|
||||
if (write) {
|
||||
BKE_ptcache_mem_pointers_incr(pm);
|
||||
BKE_ptcache_mem_pointers_incr(cur);
|
||||
|
||||
void *cur2[BPHYS_TOT_DATA];
|
||||
/* newly born particles have to be copied to previous cached frame */
|
||||
if (overwrite && write == 2 && pm2 && BKE_ptcache_mem_pointers_seek(i, pm2)) {
|
||||
pid->write_point(i, pid->calldata, pm2->cur, cfra);
|
||||
if (overwrite && write == 2 && pm2 && BKE_ptcache_mem_pointers_seek(i, pm2, cur2)) {
|
||||
pid->write_point(i, pid->calldata, cur2, cfra);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3124,8 +3129,6 @@ static PointCache *ptcache_copy(PointCache *cache, const bool copy_data)
|
|||
}
|
||||
}
|
||||
|
||||
BKE_ptcache_mem_pointers_init(pm);
|
||||
|
||||
BLI_addtail(&ncache->mem_cache, pmn);
|
||||
}
|
||||
|
||||
|
|
|
@ -5200,7 +5200,8 @@ void PE_create_particle_edit(
|
|||
|
||||
for (pm = cache->mem_cache.first; pm; pm = pm->next) {
|
||||
LOOP_POINTS {
|
||||
if (BKE_ptcache_mem_pointers_seek(p, pm) == 0) {
|
||||
void *cur[BPHYS_TOT_DATA];
|
||||
if (BKE_ptcache_mem_pointers_seek(p, pm, cur) == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -5212,12 +5213,12 @@ void PE_create_particle_edit(
|
|||
key = point->keys + point->totkey;
|
||||
}
|
||||
|
||||
key->co = pm->cur[BPHYS_DATA_LOCATION];
|
||||
key->vel = pm->cur[BPHYS_DATA_VELOCITY];
|
||||
key->rot = pm->cur[BPHYS_DATA_ROTATION];
|
||||
key->co = cur[BPHYS_DATA_LOCATION];
|
||||
key->vel = cur[BPHYS_DATA_VELOCITY];
|
||||
key->rot = cur[BPHYS_DATA_ROTATION];
|
||||
key->ftime = (float)pm->frame;
|
||||
key->time = &key->ftime;
|
||||
BKE_ptcache_mem_pointers_incr(pm);
|
||||
BKE_ptcache_mem_pointers_incr(cur);
|
||||
|
||||
point->totkey++;
|
||||
}
|
||||
|
|
|
@ -166,18 +166,19 @@ static void undoptcache_to_editcache(PTCacheUndo *undo, PTCacheEdit *edit)
|
|||
for (i = 0; i < BPHYS_TOT_DATA; i++) {
|
||||
pm->data[i] = MEM_dupallocN(pm->data[i]);
|
||||
}
|
||||
BKE_ptcache_mem_pointers_init(pm);
|
||||
void *cur[BPHYS_TOT_DATA];
|
||||
BKE_ptcache_mem_pointers_init(pm, cur);
|
||||
|
||||
LOOP_POINTS {
|
||||
LOOP_KEYS {
|
||||
if ((int)key->ftime == (int)pm->frame) {
|
||||
key->co = pm->cur[BPHYS_DATA_LOCATION];
|
||||
key->vel = pm->cur[BPHYS_DATA_VELOCITY];
|
||||
key->rot = pm->cur[BPHYS_DATA_ROTATION];
|
||||
key->co = cur[BPHYS_DATA_LOCATION];
|
||||
key->vel = cur[BPHYS_DATA_VELOCITY];
|
||||
key->rot = cur[BPHYS_DATA_ROTATION];
|
||||
key->time = &key->ftime;
|
||||
}
|
||||
}
|
||||
BKE_ptcache_mem_pointers_incr(pm);
|
||||
BKE_ptcache_mem_pointers_incr(cur);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -64,8 +64,6 @@ typedef struct PTCacheMem {
|
|||
|
||||
/** BPHYS_TOT_DATA. */
|
||||
void *data[8];
|
||||
/** BPHYS_TOT_DATA. */
|
||||
void *cur[8];
|
||||
|
||||
struct ListBase extradata;
|
||||
} PTCacheMem;
|
||||
|
|
Loading…
Reference in New Issue