From 39617932927383cf2f49142ee3a476282172e8c9 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 1 Jun 2010 19:26:35 +0000 Subject: Fix #22239: external btx won't load. --- source/blender/blenkernel/BKE_customdata.h | 2 ++ source/blender/blenkernel/BKE_multires.h | 1 + source/blender/blenkernel/intern/customdata.c | 19 +++++++++++++++++++ source/blender/blenkernel/intern/multires.c | 8 ++++++++ 4 files changed, 30 insertions(+) (limited to 'source/blender/blenkernel') diff --git a/source/blender/blenkernel/BKE_customdata.h b/source/blender/blenkernel/BKE_customdata.h index 7ca6bbe67a7..ce4286f01c8 100644 --- a/source/blender/blenkernel/BKE_customdata.h +++ b/source/blender/blenkernel/BKE_customdata.h @@ -292,6 +292,8 @@ void CustomData_external_write(struct CustomData *data, struct ID *id, CustomDataMask mask, int totelem, int free); void CustomData_external_read(struct CustomData *data, struct ID *id, CustomDataMask mask, int totelem); +void CustomData_external_reload(struct CustomData *data, + struct ID *id, CustomDataMask mask, int totelem); #endif diff --git a/source/blender/blenkernel/BKE_multires.h b/source/blender/blenkernel/BKE_multires.h index 258fb6f1b3f..8716794bbd4 100644 --- a/source/blender/blenkernel/BKE_multires.h +++ b/source/blender/blenkernel/BKE_multires.h @@ -42,6 +42,7 @@ void multires_mark_as_modified(struct Object *ob); void multires_force_update(struct Object *ob); void multires_force_render_update(struct Object *ob); +void multires_force_external_reload(struct Object *ob); struct DerivedMesh *multires_dm_create_from_derived(struct MultiresModifierData*, int local_mmd, struct DerivedMesh*, struct Object *, int, int); diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c index 361e6f3fd22..e2909bf0904 100644 --- a/source/blender/blenkernel/intern/customdata.c +++ b/source/blender/blenkernel/intern/customdata.c @@ -2322,6 +2322,25 @@ static void customdata_external_filename(char filename[FILE_MAX], ID *id, Custom BLI_path_abs(filename, path); } +void CustomData_external_reload(CustomData *data, ID *id, CustomDataMask mask, int totelem) +{ + CustomDataLayer *layer; + const LayerTypeInfo *typeInfo; + int i; + + for(i=0; itotlayer; i++) { + layer = &data->layers[i]; + typeInfo = layerType_getInfo(layer->type); + + if(!(mask & (1<type))); + else if((layer->flag & CD_FLAG_EXTERNAL) && (layer->flag & CD_FLAG_IN_MEMORY)) { + if(typeInfo->free) + typeInfo->free(layer->data, totelem, typeInfo->size); + layer->flag &= ~CD_FLAG_IN_MEMORY; + } + } +} + void CustomData_external_read(CustomData *data, ID *id, CustomDataMask mask, int totelem) { CustomDataExternal *external= data->external; diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index 1e310c1c3d0..ad069be50f5 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -139,6 +139,14 @@ void multires_force_update(Object *ob) } } +void multires_force_external_reload(Object *ob) +{ + Mesh *me = get_mesh(ob); + + CustomData_external_reload(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface); + multires_force_update(ob); +} + void multires_force_render_update(Object *ob) { if(ob && (ob->mode & OB_MODE_SCULPT) && modifiers_findByType(ob, eModifierType_Multires)) -- cgit v1.2.3