Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2010-06-01 23:26:35 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2010-06-01 23:26:35 +0400
commit39617932927383cf2f49142ee3a476282172e8c9 (patch)
tree905eac3593aa83354ed2ef20ee85e1d1bc4bb042 /source/blender/blenkernel
parentdb96d4972f201445451f4f12bd6424cc96b93d52 (diff)
Fix #22239: external btx won't load.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/BKE_customdata.h2
-rw-r--r--source/blender/blenkernel/BKE_multires.h1
-rw-r--r--source/blender/blenkernel/intern/customdata.c19
-rw-r--r--source/blender/blenkernel/intern/multires.c8
4 files changed, 30 insertions, 0 deletions
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; i<data->totlayer; i++) {
+ layer = &data->layers[i];
+ typeInfo = layerType_getInfo(layer->type);
+
+ if(!(mask & (1<<layer->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))