Fix T84588: Cache access in rna_Particle_uv_on_emitter
The function `rna_Particle_uv_on_emitter` did not handle the case where `particle->num_dmcache` was `DMCACHE_ISCHILD`. This resulted in an incorrect offset for the `mtface` pointer. The commit checks for the case and sets the offset accordingly, similar to existing code in e.g. `particle_calculate_parent_uvs`. Reviewed By: JacquesLucke Differential Revision: https://developer.blender.org/D10072
This commit is contained in:
parent
c56da67716
commit
f5c0ef52cf
Notes:
blender-bot
2023-02-14 06:57:56 +01:00
Referenced by issue #84588, uv_on_emitter crash
|
@ -132,7 +132,10 @@ typedef struct ParticleData {
|
|||
*/
|
||||
/** Index to vert/edge/face. */
|
||||
int num;
|
||||
/** Index to derived mesh data (face) to avoid slow lookups. */
|
||||
/**
|
||||
* Index to derived mesh data (face) to avoid slow lookups. It can also have negative
|
||||
* values DMCACHE_NOTFOUND and DMCACHE_ISCHILD.
|
||||
*/
|
||||
int num_dmcache;
|
||||
|
||||
/** Coordinates on face/edge number "num" and depth along. */
|
||||
|
|
|
@ -403,16 +403,15 @@ static void rna_Particle_uv_on_emitter(ParticleData *particle,
|
|||
}
|
||||
BKE_mesh_tessface_ensure(modifier->mesh_final); /* BMESH - UNTIL MODIFIER IS UPDATED FOR MPoly */
|
||||
|
||||
if (num == DMCACHE_NOTFOUND) {
|
||||
if (ELEM(num, DMCACHE_NOTFOUND, DMCACHE_ISCHILD)) {
|
||||
if (particle->num < modifier->mesh_final->totface) {
|
||||
num = particle->num;
|
||||
}
|
||||
}
|
||||
|
||||
/* get uvco */
|
||||
if (r_uv && ELEM(from, PART_FROM_FACE, PART_FROM_VOLUME)) {
|
||||
|
||||
if (num != DMCACHE_NOTFOUND) {
|
||||
if (r_uv && ELEM(from, PART_FROM_FACE, PART_FROM_VOLUME) &&
|
||||
!ELEM(num, DMCACHE_NOTFOUND, DMCACHE_ISCHILD)) {
|
||||
MFace *mface;
|
||||
MTFace *mtface;
|
||||
|
||||
|
@ -424,7 +423,6 @@ static void rna_Particle_uv_on_emitter(ParticleData *particle,
|
|||
psys_interpolate_uvs(mtface, mface->v4, particle->fuv, r_uv);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
r_uv[0] = 0.0f;
|
||||
|
|
Loading…
Reference in New Issue