Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/particle.c
| Show First 20 Lines • Show All 1,619 Lines • ▼ Show 20 Lines | static void psys_particle_on_shape(int UNUSED(distr), int UNUSED(index), | ||||
| if (orco) { | if (orco) { | ||||
| copy_v3_v3(orco, zerovec); | copy_v3_v3(orco, zerovec); | ||||
| } | } | ||||
| } | } | ||||
| /************************************************/ | /************************************************/ | ||||
| /* Particles on emitter */ | /* Particles on emitter */ | ||||
| /************************************************/ | /************************************************/ | ||||
| CustomDataMask psys_emitter_customdata_mask(ParticleSystem *psys) | void psys_emitter_customdata_mask(ParticleSystem *psys, CustomData_MeshMasks *r_cddata_masks) | ||||
| { | { | ||||
| CustomDataMask dataMask = 0; | |||||
| MTex *mtex; | MTex *mtex; | ||||
| int i; | int i; | ||||
| if (!psys->part) | if (!psys->part) | ||||
| return 0; | return; | ||||
| for (i = 0; i < MAX_MTEX; i++) { | for (i = 0; i < MAX_MTEX; i++) { | ||||
| mtex = psys->part->mtex[i]; | mtex = psys->part->mtex[i]; | ||||
| if (mtex && mtex->mapto && (mtex->texco & TEXCO_UV)) | if (mtex && mtex->mapto && (mtex->texco & TEXCO_UV)) | ||||
| dataMask |= CD_MASK_MTFACE; | r_cddata_masks->fmask |= CD_MASK_MTFACE; | ||||
| } | } | ||||
| if (psys->part->tanfac != 0.0f) | if (psys->part->tanfac != 0.0f) | ||||
| dataMask |= CD_MASK_MTFACE; | r_cddata_masks->fmask |= CD_MASK_MTFACE; | ||||
| /* ask for vertexgroups if we need them */ | /* ask for vertexgroups if we need them */ | ||||
| for (i = 0; i < PSYS_TOT_VG; i++) { | for (i = 0; i < PSYS_TOT_VG; i++) { | ||||
| if (psys->vgroup[i]) { | if (psys->vgroup[i]) { | ||||
| dataMask |= CD_MASK_MDEFORMVERT; | r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; | ||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| /* particles only need this if they are after a non deform modifier, and | /* particles only need this if they are after a non deform modifier, and | ||||
| * the modifier stack will only create them in that case. */ | * the modifier stack will only create them in that case. */ | ||||
| dataMask |= CD_MASK_ORIGSPACE_MLOOP | CD_MASK_ORIGINDEX; | r_cddata_masks->lmask |= CD_MASK_ORIGSPACE_MLOOP; | ||||
| /* XXX Check we do need all those? */ | |||||
| dataMask |= CD_MASK_ORCO; | r_cddata_masks->vmask |= CD_MASK_ORIGINDEX; | ||||
| r_cddata_masks->emask |= CD_MASK_ORIGINDEX; | |||||
| r_cddata_masks->pmask |= CD_MASK_ORIGINDEX; | |||||
| return dataMask; | r_cddata_masks->vmask |= CD_MASK_ORCO; | ||||
| } | } | ||||
| void psys_particle_on_emitter(ParticleSystemModifierData *psmd, int from, int index, int index_dmcache, | void psys_particle_on_emitter(ParticleSystemModifierData *psmd, int from, int index, int index_dmcache, | ||||
| float fuv[4], float foffset, float vec[3], float nor[3], float utan[3], float vtan[3], | float fuv[4], float foffset, float vec[3], float nor[3], float utan[3], float vtan[3], | ||||
| float orco[3]) | float orco[3]) | ||||
| { | { | ||||
| if (psmd && psmd->mesh_final) { | if (psmd && psmd->mesh_final) { | ||||
| if (psmd->psys->part->distr == PART_DISTR_GRID && psmd->psys->part->from != PART_FROM_VERT) { | if (psmd->psys->part->distr == PART_DISTR_GRID && psmd->psys->part->from != PART_FROM_VERT) { | ||||
| ▲ Show 20 Lines • Show All 2,681 Lines • Show Last 20 Lines | |||||