diff options
-rw-r--r-- | source/blender/blenkernel/BKE_idtype.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/BKE_particle.h | 9 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/idtype.c | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/lib_id.c | 9 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/lib_id_delete.c | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/particle.c | 166 |
6 files changed, 92 insertions, 98 deletions
diff --git a/source/blender/blenkernel/BKE_idtype.h b/source/blender/blenkernel/BKE_idtype.h index 243275e5219..91c0216db0b 100644 --- a/source/blender/blenkernel/BKE_idtype.h +++ b/source/blender/blenkernel/BKE_idtype.h @@ -149,7 +149,7 @@ extern IDTypeInfo IDType_ID_AR; extern IDTypeInfo IDType_ID_AC; extern IDTypeInfo IDType_ID_NT; extern IDTypeInfo IDType_ID_BR; -// extern IDTypeInfo IDType_ID_PA; +extern IDTypeInfo IDType_ID_PA; // extern IDTypeInfo IDType_ID_GD; extern IDTypeInfo IDType_ID_WM; // extern IDTypeInfo IDType_ID_MC; diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h index a7569951616..e9f83a55a70 100644 --- a/source/blender/blenkernel/BKE_particle.h +++ b/source/blender/blenkernel/BKE_particle.h @@ -331,7 +331,6 @@ int psys_uses_gravity(struct ParticleSimulationData *sim); void BKE_particlesettings_fluid_default_settings(struct ParticleSettings *part); /* free */ -void BKE_particlesettings_free(struct ParticleSettings *part); void psys_free_path_cache(struct ParticleSystem *psys, struct PTCacheEdit *edit); void psys_free(struct Object *ob, struct ParticleSystem *psys); @@ -369,16 +368,8 @@ struct ModifierData *object_add_particle_system(struct Main *bmain, const char *name); void object_remove_particle_system(struct Main *bmain, struct Scene *scene, struct Object *ob); struct ParticleSettings *BKE_particlesettings_add(struct Main *bmain, const char *name); -void BKE_particlesettings_copy_data(struct Main *bmain, - struct ParticleSettings *part_dst, - const struct ParticleSettings *part_src, - const int flag); struct ParticleSettings *BKE_particlesettings_copy(struct Main *bmain, const struct ParticleSettings *part); -void BKE_particlesettings_make_local(struct Main *bmain, - struct ParticleSettings *part, - const int flags); - void psys_reset(struct ParticleSystem *psys, int mode); void psys_find_parents(struct ParticleSimulationData *sim, const bool use_render_params); diff --git a/source/blender/blenkernel/intern/idtype.c b/source/blender/blenkernel/intern/idtype.c index 347327dfd1b..56b85f32ff7 100644 --- a/source/blender/blenkernel/intern/idtype.c +++ b/source/blender/blenkernel/intern/idtype.c @@ -76,7 +76,7 @@ static void id_type_init(void) INIT_TYPE(ID_AC); INIT_TYPE(ID_NT); INIT_TYPE(ID_BR); - // INIT_TYPE(ID_PA); + INIT_TYPE(ID_PA); // INIT_TYPE(ID_GD); INIT_TYPE(ID_WM); // INIT_TYPE(ID_MC); diff --git a/source/blender/blenkernel/intern/lib_id.c b/source/blender/blenkernel/intern/lib_id.c index ff9f342f27d..37b416918c7 100644 --- a/source/blender/blenkernel/intern/lib_id.c +++ b/source/blender/blenkernel/intern/lib_id.c @@ -533,9 +533,7 @@ bool BKE_lib_id_make_local(Main *bmain, ID *id, const bool test, const int flags BLI_assert(0); return true; case ID_PA: - if (!test) { - BKE_particlesettings_make_local(bmain, (ParticleSettings *)id, flags); - } + BLI_assert(0); return true; case ID_GD: if (!test) { @@ -745,8 +743,7 @@ bool BKE_id_copy_ex(Main *bmain, const ID *id, ID **r_newid, const int flag) BLI_assert(0); break; case ID_PA: - BKE_particlesettings_copy_data( - bmain, (ParticleSettings *)*r_newid, (ParticleSettings *)id, flag); + BLI_assert(0); break; case ID_GD: BKE_gpencil_copy_data((bGPdata *)*r_newid, (bGPdata *)id, flag); @@ -1372,7 +1369,7 @@ void BKE_libblock_init_empty(ID *id) BLI_assert(0); break; case ID_PA: - /* Nothing to do. */ + BLI_assert(0); break; case ID_PC: BLI_assert(0); diff --git a/source/blender/blenkernel/intern/lib_id_delete.c b/source/blender/blenkernel/intern/lib_id_delete.c index 430b40b57df..268e906333d 100644 --- a/source/blender/blenkernel/intern/lib_id_delete.c +++ b/source/blender/blenkernel/intern/lib_id_delete.c @@ -214,7 +214,7 @@ void BKE_libblock_free_datablock(ID *id, const int UNUSED(flag)) BLI_assert(0); break; case ID_PA: - BKE_particlesettings_free((ParticleSettings *)id); + BLI_assert(0); break; case ID_WM: BLI_assert(0); diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c index a77eb0b5ed6..cdfaa0fe075 100644 --- a/source/blender/blenkernel/intern/particle.c +++ b/source/blender/blenkernel/intern/particle.c @@ -58,6 +58,7 @@ #include "BKE_collection.h" #include "BKE_colortools.h" #include "BKE_effect.h" +#include "BKE_idtype.h" #include "BKE_main.h" #include "BKE_lattice.h" @@ -80,6 +81,91 @@ #include "particle_private.h" +static void fluid_free_settings(SPHFluidSettings *fluid); + +static void particle_settings_copy_data(Main *UNUSED(bmain), + ID *id_dst, + const ID *id_src, + const int UNUSED(flag)) +{ + ParticleSettings *particle_settings_dst = (ParticleSettings *)id_dst; + const ParticleSettings *partticle_settings_src = (const ParticleSettings *)id_src; + + particle_settings_dst->pd = BKE_partdeflect_copy(partticle_settings_src->pd); + particle_settings_dst->pd2 = BKE_partdeflect_copy(partticle_settings_src->pd2); + particle_settings_dst->effector_weights = MEM_dupallocN( + partticle_settings_src->effector_weights); + particle_settings_dst->fluid = MEM_dupallocN(partticle_settings_src->fluid); + + if (partticle_settings_src->clumpcurve) { + particle_settings_dst->clumpcurve = BKE_curvemapping_copy(partticle_settings_src->clumpcurve); + } + if (partticle_settings_src->roughcurve) { + particle_settings_dst->roughcurve = BKE_curvemapping_copy(partticle_settings_src->roughcurve); + } + if (partticle_settings_src->twistcurve) { + particle_settings_dst->twistcurve = BKE_curvemapping_copy(partticle_settings_src->twistcurve); + } + + particle_settings_dst->boids = boid_copy_settings(partticle_settings_src->boids); + + for (int a = 0; a < MAX_MTEX; a++) { + if (partticle_settings_src->mtex[a]) { + particle_settings_dst->mtex[a] = MEM_dupallocN(partticle_settings_src->mtex[a]); + } + } + + BLI_duplicatelist(&particle_settings_dst->instance_weights, + &partticle_settings_src->instance_weights); +} + +static void particle_settings_free_data(ID *id) +{ + ParticleSettings *particle_settings = (ParticleSettings *)id; + + BKE_animdata_free((ID *)particle_settings, false); + + for (int a = 0; a < MAX_MTEX; a++) { + MEM_SAFE_FREE(particle_settings->mtex[a]); + } + + if (particle_settings->clumpcurve) { + BKE_curvemapping_free(particle_settings->clumpcurve); + } + if (particle_settings->roughcurve) { + BKE_curvemapping_free(particle_settings->roughcurve); + } + if (particle_settings->twistcurve) { + BKE_curvemapping_free(particle_settings->twistcurve); + } + + BKE_partdeflect_free(particle_settings->pd); + BKE_partdeflect_free(particle_settings->pd2); + + MEM_SAFE_FREE(particle_settings->effector_weights); + + BLI_freelistN(&particle_settings->instance_weights); + + boid_free_settings(particle_settings->boids); + fluid_free_settings(particle_settings->fluid); +} + +IDTypeInfo IDType_ID_PA = { + .id_code = ID_PA, + .id_filter = FILTER_ID_PA, + .main_listbase_index = INDEX_ID_PA, + .struct_size = sizeof(ParticleSettings), + .name = "ParticleSettings", + .name_plural = "particles", + .translation_context = BLT_I18NCONTEXT_ID_PARTICLESETTINGS, + .flags = 0, + + .init_data = NULL, + .copy_data = particle_settings_copy_data, + .free_data = particle_settings_free_data, + .make_local = NULL, +}; + unsigned int PSYS_FRAND_SEED_OFFSET[PSYS_FRAND_COUNT]; unsigned int PSYS_FRAND_SEED_MULTIPLIER[PSYS_FRAND_COUNT]; float PSYS_FRAND_BASE[PSYS_FRAND_COUNT]; @@ -484,40 +570,6 @@ static void fluid_free_settings(SPHFluidSettings *fluid) } } -/** - * Free (or release) any data used by this particle settings (does not free the partsett itself). - */ -void BKE_particlesettings_free(ParticleSettings *part) -{ - int a; - - BKE_animdata_free((ID *)part, false); - - for (a = 0; a < MAX_MTEX; a++) { - MEM_SAFE_FREE(part->mtex[a]); - } - - if (part->clumpcurve) { - BKE_curvemapping_free(part->clumpcurve); - } - if (part->roughcurve) { - BKE_curvemapping_free(part->roughcurve); - } - if (part->twistcurve) { - BKE_curvemapping_free(part->twistcurve); - } - - BKE_partdeflect_free(part->pd); - BKE_partdeflect_free(part->pd2); - - MEM_SAFE_FREE(part->effector_weights); - - BLI_freelistN(&part->instance_weights); - - boid_free_settings(part->boids); - fluid_free_settings(part->fluid); -} - void free_hair(Object *object, ParticleSystem *psys, int dynamics) { PARTICLE_P; @@ -3789,47 +3841,6 @@ void BKE_particlesettings_twist_curve_init(ParticleSettings *part) part->twistcurve = cumap; } -/** - * Only copy internal data of ParticleSettings ID from source - * to already allocated/initialized destination. - * You probably never want to use that directly, - * use #BKE_id_copy or #BKE_id_copy_ex for typical needs. - * - * WARNING! This function will not handle ID user count! - * - * \param flag: Copying options (see BKE_lib_id.h's LIB_ID_COPY_... flags for more). - */ -void BKE_particlesettings_copy_data(Main *UNUSED(bmain), - ParticleSettings *part_dst, - const ParticleSettings *part_src, - const int UNUSED(flag)) -{ - part_dst->pd = BKE_partdeflect_copy(part_src->pd); - part_dst->pd2 = BKE_partdeflect_copy(part_src->pd2); - part_dst->effector_weights = MEM_dupallocN(part_src->effector_weights); - part_dst->fluid = MEM_dupallocN(part_src->fluid); - - if (part_src->clumpcurve) { - part_dst->clumpcurve = BKE_curvemapping_copy(part_src->clumpcurve); - } - if (part_src->roughcurve) { - part_dst->roughcurve = BKE_curvemapping_copy(part_src->roughcurve); - } - if (part_src->twistcurve) { - part_dst->twistcurve = BKE_curvemapping_copy(part_src->twistcurve); - } - - part_dst->boids = boid_copy_settings(part_src->boids); - - for (int a = 0; a < MAX_MTEX; a++) { - if (part_src->mtex[a]) { - part_dst->mtex[a] = MEM_dupallocN(part_src->mtex[a]); - } - } - - BLI_duplicatelist(&part_dst->instance_weights, &part_src->instance_weights); -} - ParticleSettings *BKE_particlesettings_copy(Main *bmain, const ParticleSettings *part) { ParticleSettings *part_copy; @@ -3837,11 +3848,6 @@ ParticleSettings *BKE_particlesettings_copy(Main *bmain, const ParticleSettings return part_copy; } -void BKE_particlesettings_make_local(Main *bmain, ParticleSettings *part, const int flags) -{ - BKE_lib_id_make_local_generic(bmain, &part->id, flags); -} - /************************************************/ /* Textures */ /************************************************/ |