Refactor: move more modifier specific code out of readfile.c
This commit is contained in:
		@@ -5557,16 +5557,6 @@ static void direct_link_modifiers(BlendDataReader *reader, ListBase *lb, Object
 | 
			
		||||
    if (is_allocated) {
 | 
			
		||||
      /* All the fields has been properly allocated. */
 | 
			
		||||
    }
 | 
			
		||||
    else if (md->type == eModifierType_Subsurf) {
 | 
			
		||||
      SubsurfModifierData *smd = (SubsurfModifierData *)md;
 | 
			
		||||
 | 
			
		||||
      smd->emCache = smd->mCache = NULL;
 | 
			
		||||
    }
 | 
			
		||||
    else if (md->type == eModifierType_Armature) {
 | 
			
		||||
      ArmatureModifierData *amd = (ArmatureModifierData *)md;
 | 
			
		||||
 | 
			
		||||
      amd->vert_coords_prev = NULL;
 | 
			
		||||
    }
 | 
			
		||||
    else if (md->type == eModifierType_Cloth) {
 | 
			
		||||
      ClothModifierData *clmd = (ClothModifierData *)md;
 | 
			
		||||
 | 
			
		||||
@@ -5706,65 +5696,6 @@ static void direct_link_modifiers(BlendDataReader *reader, ListBase *lb, Object
 | 
			
		||||
        BLO_read_data_address(reader, &pmd->brush->vel_ramp);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    else if (md->type == eModifierType_Collision) {
 | 
			
		||||
      CollisionModifierData *collmd = (CollisionModifierData *)md;
 | 
			
		||||
#if 0
 | 
			
		||||
      // TODO: CollisionModifier should use pointcache
 | 
			
		||||
      // + have proper reset events before enabling this
 | 
			
		||||
      collmd->x = newdataadr(fd, collmd->x);
 | 
			
		||||
      collmd->xnew = newdataadr(fd, collmd->xnew);
 | 
			
		||||
      collmd->mfaces = newdataadr(fd, collmd->mfaces);
 | 
			
		||||
 | 
			
		||||
      collmd->current_x = MEM_calloc_arrayN(collmd->numverts, sizeof(MVert), "current_x");
 | 
			
		||||
      collmd->current_xnew = MEM_calloc_arrayN(collmd->numverts, sizeof(MVert), "current_xnew");
 | 
			
		||||
      collmd->current_v = MEM_calloc_arrayN(collmd->numverts, sizeof(MVert), "current_v");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
      collmd->x = NULL;
 | 
			
		||||
      collmd->xnew = NULL;
 | 
			
		||||
      collmd->current_x = NULL;
 | 
			
		||||
      collmd->current_xnew = NULL;
 | 
			
		||||
      collmd->current_v = NULL;
 | 
			
		||||
      collmd->time_x = collmd->time_xnew = -1000;
 | 
			
		||||
      collmd->mvert_num = 0;
 | 
			
		||||
      collmd->tri_num = 0;
 | 
			
		||||
      collmd->is_static = false;
 | 
			
		||||
      collmd->bvhtree = NULL;
 | 
			
		||||
      collmd->tri = NULL;
 | 
			
		||||
    }
 | 
			
		||||
    else if (md->type == eModifierType_Surface) {
 | 
			
		||||
      SurfaceModifierData *surmd = (SurfaceModifierData *)md;
 | 
			
		||||
 | 
			
		||||
      surmd->mesh = NULL;
 | 
			
		||||
      surmd->bvhtree = NULL;
 | 
			
		||||
      surmd->x = NULL;
 | 
			
		||||
      surmd->v = NULL;
 | 
			
		||||
      surmd->numverts = 0;
 | 
			
		||||
    }
 | 
			
		||||
    else if (md->type == eModifierType_ParticleSystem) {
 | 
			
		||||
      ParticleSystemModifierData *psmd = (ParticleSystemModifierData *)md;
 | 
			
		||||
 | 
			
		||||
      psmd->mesh_final = NULL;
 | 
			
		||||
      psmd->mesh_original = NULL;
 | 
			
		||||
      BLO_read_data_address(reader, &psmd->psys);
 | 
			
		||||
      psmd->flag &= ~eParticleSystemFlag_psys_updated;
 | 
			
		||||
      psmd->flag |= eParticleSystemFlag_file_loaded;
 | 
			
		||||
    }
 | 
			
		||||
    else if (md->type == eModifierType_Explode) {
 | 
			
		||||
      ExplodeModifierData *psmd = (ExplodeModifierData *)md;
 | 
			
		||||
 | 
			
		||||
      psmd->facepa = NULL;
 | 
			
		||||
    }
 | 
			
		||||
    else if (md->type == eModifierType_Ocean) {
 | 
			
		||||
      OceanModifierData *omd = (OceanModifierData *)md;
 | 
			
		||||
      omd->oceancache = NULL;
 | 
			
		||||
      omd->ocean = NULL;
 | 
			
		||||
    }
 | 
			
		||||
    else if (md->type == eModifierType_MeshSequenceCache) {
 | 
			
		||||
      MeshSeqCacheModifierData *msmcd = (MeshSeqCacheModifierData *)md;
 | 
			
		||||
      msmcd->reader = NULL;
 | 
			
		||||
      msmcd->reader_object_path[0] = '\0';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (mti->blendRead != NULL) {
 | 
			
		||||
      mti->blendRead(reader, md);
 | 
			
		||||
 
 | 
			
		||||
@@ -49,6 +49,8 @@
 | 
			
		||||
 | 
			
		||||
#include "RNA_access.h"
 | 
			
		||||
 | 
			
		||||
#include "BLO_read_write.h"
 | 
			
		||||
 | 
			
		||||
#include "DEG_depsgraph_query.h"
 | 
			
		||||
 | 
			
		||||
#include "bmesh.h"
 | 
			
		||||
@@ -261,6 +263,13 @@ static void panelRegister(ARegionType *region_type)
 | 
			
		||||
  modifier_panel_register(region_type, eModifierType_Armature, panel_draw);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void blendRead(BlendDataReader *UNUSED(reader), ModifierData *md)
 | 
			
		||||
{
 | 
			
		||||
  ArmatureModifierData *amd = (ArmatureModifierData *)md;
 | 
			
		||||
 | 
			
		||||
  amd->vert_coords_prev = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ModifierTypeInfo modifierType_Armature = {
 | 
			
		||||
    /* name */ "Armature",
 | 
			
		||||
    /* structName */ "ArmatureModifierData",
 | 
			
		||||
@@ -293,5 +302,5 @@ ModifierTypeInfo modifierType_Armature = {
 | 
			
		||||
    /* freeRuntimeData */ NULL,
 | 
			
		||||
    /* panelRegister */ panelRegister,
 | 
			
		||||
    /* blendWrite */ NULL,
 | 
			
		||||
    /* blendRead */ NULL,
 | 
			
		||||
    /* blendRead */ blendRead,
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -54,6 +54,8 @@
 | 
			
		||||
#include "MOD_ui_common.h"
 | 
			
		||||
#include "MOD_util.h"
 | 
			
		||||
 | 
			
		||||
#include "BLO_read_write.h"
 | 
			
		||||
 | 
			
		||||
#include "DEG_depsgraph_query.h"
 | 
			
		||||
 | 
			
		||||
static void initData(ModifierData *md)
 | 
			
		||||
@@ -269,6 +271,34 @@ static void panelRegister(ARegionType *region_type)
 | 
			
		||||
  modifier_panel_register(region_type, eModifierType_Collision, panel_draw);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void blendRead(BlendDataReader *UNUSED(reader), ModifierData *md)
 | 
			
		||||
{
 | 
			
		||||
  CollisionModifierData *collmd = (CollisionModifierData *)md;
 | 
			
		||||
#if 0
 | 
			
		||||
      // TODO: CollisionModifier should use pointcache
 | 
			
		||||
      // + have proper reset events before enabling this
 | 
			
		||||
      collmd->x = newdataadr(fd, collmd->x);
 | 
			
		||||
      collmd->xnew = newdataadr(fd, collmd->xnew);
 | 
			
		||||
      collmd->mfaces = newdataadr(fd, collmd->mfaces);
 | 
			
		||||
 | 
			
		||||
      collmd->current_x = MEM_calloc_arrayN(collmd->numverts, sizeof(MVert), "current_x");
 | 
			
		||||
      collmd->current_xnew = MEM_calloc_arrayN(collmd->numverts, sizeof(MVert), "current_xnew");
 | 
			
		||||
      collmd->current_v = MEM_calloc_arrayN(collmd->numverts, sizeof(MVert), "current_v");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  collmd->x = NULL;
 | 
			
		||||
  collmd->xnew = NULL;
 | 
			
		||||
  collmd->current_x = NULL;
 | 
			
		||||
  collmd->current_xnew = NULL;
 | 
			
		||||
  collmd->current_v = NULL;
 | 
			
		||||
  collmd->time_x = collmd->time_xnew = -1000;
 | 
			
		||||
  collmd->mvert_num = 0;
 | 
			
		||||
  collmd->tri_num = 0;
 | 
			
		||||
  collmd->is_static = false;
 | 
			
		||||
  collmd->bvhtree = NULL;
 | 
			
		||||
  collmd->tri = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ModifierTypeInfo modifierType_Collision = {
 | 
			
		||||
    /* name */ "Collision",
 | 
			
		||||
    /* structName */ "CollisionModifierData",
 | 
			
		||||
@@ -300,5 +330,5 @@ ModifierTypeInfo modifierType_Collision = {
 | 
			
		||||
    /* freeRuntimeData */ NULL,
 | 
			
		||||
    /* panelRegister */ panelRegister,
 | 
			
		||||
    /* blendWrite */ NULL,
 | 
			
		||||
    /* blendRead */ NULL,
 | 
			
		||||
    /* blendRead */ blendRead,
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -49,6 +49,8 @@
 | 
			
		||||
#include "UI_interface.h"
 | 
			
		||||
#include "UI_resources.h"
 | 
			
		||||
 | 
			
		||||
#include "BLO_read_write.h"
 | 
			
		||||
 | 
			
		||||
#include "RNA_access.h"
 | 
			
		||||
 | 
			
		||||
#include "DEG_depsgraph_query.h"
 | 
			
		||||
@@ -1228,6 +1230,13 @@ static void panelRegister(ARegionType *region_type)
 | 
			
		||||
  modifier_panel_register(region_type, eModifierType_Explode, panel_draw);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void blendRead(BlendDataReader *UNUSED(reader), ModifierData *md)
 | 
			
		||||
{
 | 
			
		||||
  ExplodeModifierData *psmd = (ExplodeModifierData *)md;
 | 
			
		||||
 | 
			
		||||
  psmd->facepa = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ModifierTypeInfo modifierType_Explode = {
 | 
			
		||||
    /* name */ "Explode",
 | 
			
		||||
    /* structName */ "ExplodeModifierData",
 | 
			
		||||
@@ -1258,5 +1267,5 @@ ModifierTypeInfo modifierType_Explode = {
 | 
			
		||||
    /* freeRuntimeData */ NULL,
 | 
			
		||||
    /* panelRegister */ panelRegister,
 | 
			
		||||
    /* blendWrite */ NULL,
 | 
			
		||||
    /* blendRead */ NULL,
 | 
			
		||||
    /* blendRead */ blendRead,
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -44,6 +44,8 @@
 | 
			
		||||
 | 
			
		||||
#include "RNA_access.h"
 | 
			
		||||
 | 
			
		||||
#include "BLO_read_write.h"
 | 
			
		||||
 | 
			
		||||
#include "DEG_depsgraph_build.h"
 | 
			
		||||
#include "DEG_depsgraph_query.h"
 | 
			
		||||
 | 
			
		||||
@@ -229,6 +231,13 @@ static void panelRegister(ARegionType *region_type)
 | 
			
		||||
  modifier_panel_register(region_type, eModifierType_MeshSequenceCache, panel_draw);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void blendRead(BlendDataReader *UNUSED(reader), ModifierData *md)
 | 
			
		||||
{
 | 
			
		||||
  MeshSeqCacheModifierData *msmcd = (MeshSeqCacheModifierData *)md;
 | 
			
		||||
  msmcd->reader = NULL;
 | 
			
		||||
  msmcd->reader_object_path[0] = '\0';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ModifierTypeInfo modifierType_MeshSequenceCache = {
 | 
			
		||||
    /* name */ "MeshSequenceCache",
 | 
			
		||||
    /* structName */ "MeshSeqCacheModifierData",
 | 
			
		||||
@@ -260,5 +269,5 @@ ModifierTypeInfo modifierType_MeshSequenceCache = {
 | 
			
		||||
    /* freeRuntimeData */ NULL,
 | 
			
		||||
    /* panelRegister */ panelRegister,
 | 
			
		||||
    /* blendWrite */ NULL,
 | 
			
		||||
    /* blendRead */ NULL,
 | 
			
		||||
    /* blendRead */ blendRead,
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -49,6 +49,8 @@
 | 
			
		||||
 | 
			
		||||
#include "RNA_access.h"
 | 
			
		||||
 | 
			
		||||
#include "BLO_read_write.h"
 | 
			
		||||
 | 
			
		||||
#include "WM_types.h" /* For UI free bake operator. */
 | 
			
		||||
 | 
			
		||||
#include "DEG_depsgraph_query.h"
 | 
			
		||||
@@ -674,6 +676,13 @@ static void panelRegister(ARegionType *region_type)
 | 
			
		||||
#endif /* WITH_OCEANSIM */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void blendRead(BlendDataReader *UNUSED(reader), ModifierData *md)
 | 
			
		||||
{
 | 
			
		||||
  OceanModifierData *omd = (OceanModifierData *)md;
 | 
			
		||||
  omd->oceancache = NULL;
 | 
			
		||||
  omd->ocean = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ModifierTypeInfo modifierType_Ocean = {
 | 
			
		||||
    /* name */ "Ocean",
 | 
			
		||||
    /* structName */ "OceanModifierData",
 | 
			
		||||
@@ -706,5 +715,5 @@ ModifierTypeInfo modifierType_Ocean = {
 | 
			
		||||
    /* freeRuntimeData */ NULL,
 | 
			
		||||
    /* panelRegister */ panelRegister,
 | 
			
		||||
    /* blendWrite */ NULL,
 | 
			
		||||
    /* blendRead */ NULL,
 | 
			
		||||
    /* blendRead */ blendRead,
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -46,6 +46,8 @@
 | 
			
		||||
 | 
			
		||||
#include "DEG_depsgraph_query.h"
 | 
			
		||||
 | 
			
		||||
#include "BLO_read_write.h"
 | 
			
		||||
 | 
			
		||||
#include "MOD_ui_common.h"
 | 
			
		||||
#include "MOD_util.h"
 | 
			
		||||
 | 
			
		||||
@@ -295,6 +297,18 @@ static void panelRegister(ARegionType *region_type)
 | 
			
		||||
  modifier_panel_register(region_type, eModifierType_ParticleSystem, panel_draw);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void blendRead(BlendDataReader *reader, ModifierData *md)
 | 
			
		||||
{
 | 
			
		||||
  ParticleSystemModifierData *psmd = (ParticleSystemModifierData *)md;
 | 
			
		||||
 | 
			
		||||
  psmd->mesh_final = NULL;
 | 
			
		||||
  psmd->mesh_original = NULL;
 | 
			
		||||
  /* This is written as part of ob->particlesystem. */
 | 
			
		||||
  BLO_read_data_address(reader, &psmd->psys);
 | 
			
		||||
  psmd->flag &= ~eParticleSystemFlag_psys_updated;
 | 
			
		||||
  psmd->flag |= eParticleSystemFlag_file_loaded;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ModifierTypeInfo modifierType_ParticleSystem = {
 | 
			
		||||
    /* name */ "ParticleSystem",
 | 
			
		||||
    /* structName */ "ParticleSystemModifierData",
 | 
			
		||||
@@ -330,5 +344,5 @@ ModifierTypeInfo modifierType_ParticleSystem = {
 | 
			
		||||
    /* freeRuntimeData */ NULL,
 | 
			
		||||
    /* panelRegister */ panelRegister,
 | 
			
		||||
    /* blendWrite */ NULL,
 | 
			
		||||
    /* blendRead */ NULL,
 | 
			
		||||
    /* blendRead */ blendRead,
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -57,6 +57,8 @@
 | 
			
		||||
#include "MOD_modifiertypes.h"
 | 
			
		||||
#include "MOD_ui_common.h"
 | 
			
		||||
 | 
			
		||||
#include "BLO_read_write.h"
 | 
			
		||||
 | 
			
		||||
#include "intern/CCGSubSurf.h"
 | 
			
		||||
 | 
			
		||||
typedef struct SubsurfRuntimeData {
 | 
			
		||||
@@ -425,6 +427,13 @@ static void panelRegister(ARegionType *region_type)
 | 
			
		||||
      region_type, "advanced", "Advanced", NULL, advanced_panel_draw, panel_type);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void blendRead(BlendDataReader *UNUSED(reader), ModifierData *md)
 | 
			
		||||
{
 | 
			
		||||
  SubsurfModifierData *smd = (SubsurfModifierData *)md;
 | 
			
		||||
 | 
			
		||||
  smd->emCache = smd->mCache = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ModifierTypeInfo modifierType_Subsurf = {
 | 
			
		||||
    /* name */ "Subdivision",
 | 
			
		||||
    /* structName */ "SubsurfModifierData",
 | 
			
		||||
@@ -458,5 +467,5 @@ ModifierTypeInfo modifierType_Subsurf = {
 | 
			
		||||
    /* freeRuntimeData */ freeRuntimeData,
 | 
			
		||||
    /* panelRegister */ panelRegister,
 | 
			
		||||
    /* blendWrite */ NULL,
 | 
			
		||||
    /* blendRead */ NULL,
 | 
			
		||||
    /* blendRead */ blendRead,
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -51,6 +51,8 @@
 | 
			
		||||
#include "MOD_ui_common.h"
 | 
			
		||||
#include "MOD_util.h"
 | 
			
		||||
 | 
			
		||||
#include "BLO_read_write.h"
 | 
			
		||||
 | 
			
		||||
#include "MEM_guardedalloc.h"
 | 
			
		||||
 | 
			
		||||
static void initData(ModifierData *md)
 | 
			
		||||
@@ -210,6 +212,17 @@ static void panelRegister(ARegionType *region_type)
 | 
			
		||||
  modifier_panel_register(region_type, eModifierType_Surface, panel_draw);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void blendRead(BlendDataReader *UNUSED(reader), ModifierData *md)
 | 
			
		||||
{
 | 
			
		||||
  SurfaceModifierData *surmd = (SurfaceModifierData *)md;
 | 
			
		||||
 | 
			
		||||
  surmd->mesh = NULL;
 | 
			
		||||
  surmd->bvhtree = NULL;
 | 
			
		||||
  surmd->x = NULL;
 | 
			
		||||
  surmd->v = NULL;
 | 
			
		||||
  surmd->numverts = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ModifierTypeInfo modifierType_Surface = {
 | 
			
		||||
    /* name */ "Surface",
 | 
			
		||||
    /* structName */ "SurfaceModifierData",
 | 
			
		||||
@@ -242,5 +255,5 @@ ModifierTypeInfo modifierType_Surface = {
 | 
			
		||||
    /* freeRuntimeData */ NULL,
 | 
			
		||||
    /* panelRegister */ panelRegister,
 | 
			
		||||
    /* blendWrite */ NULL,
 | 
			
		||||
    /* blendRead */ NULL,
 | 
			
		||||
    /* blendRead */ blendRead,
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user