From af3d7123c9721bc0e53432528839a32ed5da920b Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Wed, 16 Jun 2021 16:03:35 +0200 Subject: ShaderFX/LibOverride: Add `BKE_shaderfx_is_nonlocal_in_liboverride` util. Used to detect if a shaderfx is purely local, or comes from linked data, in case of a liboverride. Not actually used yet since we do not currently support adding shaderfx's to overrides, but will be in the future, and matches constraints and modifiers code. --- source/blender/blenkernel/BKE_shader_fx.h | 2 ++ source/blender/blenkernel/intern/shader_fx.c | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/source/blender/blenkernel/BKE_shader_fx.h b/source/blender/blenkernel/BKE_shader_fx.h index e385f77565b..7e3783a3ee9 100644 --- a/source/blender/blenkernel/BKE_shader_fx.h +++ b/source/blender/blenkernel/BKE_shader_fx.h @@ -160,6 +160,8 @@ void BKE_shaderfx_free_ex(struct ShaderFxData *fx, const int flag); void BKE_shaderfx_free(struct ShaderFxData *fx); bool BKE_shaderfx_unique_name(struct ListBase *shaderfx, struct ShaderFxData *fx); bool BKE_shaderfx_depends_ontime(struct ShaderFxData *fx); +bool BKE_shaderfx_is_nonlocal_in_liboverride(const struct Object *ob, + const struct ShaderFxData *shaderfx); struct ShaderFxData *BKE_shaderfx_findby_type(struct Object *ob, ShaderFxType type); struct ShaderFxData *BKE_shaderfx_findby_name(struct Object *ob, const char *name); void BKE_shaderfx_copydata_generic(const struct ShaderFxData *fx_src, struct ShaderFxData *fx_dst); diff --git a/source/blender/blenkernel/intern/shader_fx.c b/source/blender/blenkernel/intern/shader_fx.c index 3727ec866ca..60f0b744e59 100644 --- a/source/blender/blenkernel/intern/shader_fx.c +++ b/source/blender/blenkernel/intern/shader_fx.c @@ -164,6 +164,18 @@ const ShaderFxTypeInfo *BKE_shaderfx_get_info(ShaderFxType type) return NULL; } +/** + * Check whether given shaderfx is not local (i.e. from linked data) when the object is a library + * override. + * + * \param shaderfx: May be NULL, in which case we consider it as a non-local shaderfx case. + */ +bool BKE_shaderfx_is_nonlocal_in_liboverride(const Object *ob, const ShaderFxData *shaderfx) +{ + return (ID_IS_OVERRIDE_LIBRARY(ob) && + ((shaderfx == NULL) || (shaderfx->flag & eShaderFxFlag_OverrideLibrary_Local) == 0)); +} + /** * Get an effect's panel type, which was defined in the #panelRegister callback. * -- cgit v1.2.3