Fix #22239: external btx won't load.
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
|
||||
#include "BKE_animsys.h"
|
||||
#include "BKE_bmesh.h" /* For BevelModifierData */
|
||||
#include "BKE_multires.h"
|
||||
#include "BKE_smoke.h" /* For smokeModifier_free & smokeModifier_createType */
|
||||
|
||||
#include "WM_api.h"
|
||||
@@ -382,8 +383,10 @@ static void rna_MultiresModifier_filename_set(PointerRNA *ptr, const char *value
|
||||
Object *ob= (Object*)ptr->id.data;
|
||||
CustomDataExternal *external= ((Mesh*)ob->data)->fdata.external;
|
||||
|
||||
if(external)
|
||||
if(external && strcmp(external->filename, value)) {
|
||||
BLI_strncpy(external->filename, value, sizeof(external->filename));
|
||||
multires_force_external_reload(ob);
|
||||
}
|
||||
}
|
||||
|
||||
static int rna_MultiresModifier_filename_length(PointerRNA *ptr)
|
||||
|
||||
Reference in New Issue
Block a user