diff options
author | Jacques Lucke <jacques@blender.org> | 2020-11-06 18:42:37 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2020-11-06 18:42:50 +0300 |
commit | af245326125aed919bc7560d20f6152e55d1478f (patch) | |
tree | cc0c41d9af71f6f58d7e27d4036c6ee1fcf3dced /source/blender/blenkernel/intern/shader_fx.c | |
parent | 580ff2cb937daf43699908afe1190baea8d117aa (diff) |
Refactor: move ShaderFx .blend I/O to blenkernel
Ref T76372.
Diffstat (limited to 'source/blender/blenkernel/intern/shader_fx.c')
-rw-r--r-- | source/blender/blenkernel/intern/shader_fx.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/shader_fx.c b/source/blender/blenkernel/intern/shader_fx.c index 2ae95492708..3727ec866ca 100644 --- a/source/blender/blenkernel/intern/shader_fx.c +++ b/source/blender/blenkernel/intern/shader_fx.c @@ -50,6 +50,8 @@ #include "FX_shader_types.h" +#include "BLO_read_write.h" + static ShaderFxTypeInfo *shader_fx_types[NUM_SHADER_FX_TYPES] = {NULL}; /* *************************************************** */ @@ -276,3 +278,45 @@ ShaderFxData *BKE_shaderfx_findby_name(Object *ob, const char *name) { return BLI_findstring(&(ob->shader_fx), name, offsetof(ShaderFxData, name)); } + +void BKE_shaderfx_blend_write(BlendWriter *writer, ListBase *fxbase) +{ + if (fxbase == NULL) { + return; + } + + LISTBASE_FOREACH (ShaderFxData *, fx, fxbase) { + const ShaderFxTypeInfo *fxi = BKE_shaderfx_get_info(fx->type); + if (fxi == NULL) { + return; + } + + BLO_write_struct_by_name(writer, fxi->struct_name, fx); + } +} + +void BKE_shaderfx_blend_read_data(BlendDataReader *reader, ListBase *lb) +{ + BLO_read_list(reader, lb); + + LISTBASE_FOREACH (ShaderFxData *, fx, lb) { + fx->error = NULL; + + /* if shader disappear, or for upward compatibility */ + if (NULL == BKE_shaderfx_get_info(fx->type)) { + fx->type = eShaderFxType_None; + } + } +} + +void BKE_shaderfx_blend_read_lib(BlendLibReader *reader, Object *ob) +{ + BKE_shaderfx_foreach_ID_link(ob, BKE_object_modifiers_lib_link_common, reader); + + /* If linking from a library, clear 'local' library override flag. */ + if (ob->id.lib != NULL) { + LISTBASE_FOREACH (ShaderFxData *, fx, &ob->shader_fx) { + fx->flag &= ~eShaderFxFlag_OverrideLibrary_Local; + } + } +} |