diff options
author | Dalai Felinto <dfelinto@gmail.com> | 2017-02-09 14:48:39 +0300 |
---|---|---|
committer | Dalai Felinto <dfelinto@gmail.com> | 2017-02-09 14:48:39 +0300 |
commit | f20cc9e54cb0573e0dcf8c20002af766c765bb6e (patch) | |
tree | 75a4ff5cb597a23d9b5bfab83c5ccad8510cc658 /source/blender | |
parent | 08399aca62975741f407703ff40bf2060ee3b758 (diff) |
Fix logic in CollectionEngineSetting update
Now Clay engine can show different materials per collection o/
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/intern/layer.c | 14 | ||||
-rw-r--r-- | source/blender/draw/engines/clay/clay.c | 9 |
2 files changed, 16 insertions, 7 deletions
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c index a674d08442e..ef4816af54d 100644 --- a/source/blender/blenkernel/intern/layer.c +++ b/source/blender/blenkernel/intern/layer.c @@ -938,22 +938,25 @@ static void collection_engine_settings_merge(CollectionEngineSettings *ces_dst, static void layer_collection_engine_settings_update( LayerCollection *lc, CollectionEngineSettings *ces_parent, - Object *ob, CollectionEngineSettings *ces_ob) + Base *base, CollectionEngineSettings *ces_ob) { - if ((lc->flag & COLLECTION_VISIBLE) != 0) { + if ((lc->flag & COLLECTION_VISIBLE) == 0) { return; } CollectionEngineSettings ces = {NULL}; collection_engine_settings_copy(&ces, ces_parent); - if (BLI_findptr(&lc->object_bases, ob, offsetof(LinkData, data)) != NULL) { + CollectionEngineSettings *ces_lc = BKE_layer_collection_engine_get(lc, ces.name); + collection_engine_settings_merge(&ces, ces_lc); + + if (BLI_findptr(&lc->object_bases, base, offsetof(LinkData, data)) != NULL) { collection_engine_settings_merge(ces_ob, &ces); } /* do it recursively */ for (LayerCollection *lcn = lc->layer_collections.first; lcn; lcn = lcn->next) { - layer_collection_engine_settings_update(lcn, &ces, ob, ces_ob); + layer_collection_engine_settings_update(lcn, &ces, base, ces_ob); } BKE_layer_collection_engine_settings_free(&ces); @@ -965,6 +968,7 @@ static void layer_collection_engine_settings_update( */ static void scene_layer_engine_settings_update(SceneLayer *sl, Object *ob, const char *engine_name) { + Base *base = BKE_scene_layer_base_find(sl, ob); CollectionEngineSettings ces_layer = {NULL}, *ces_ob; collection_engine_settings_init(&ces_layer, engine_name); @@ -979,7 +983,7 @@ static void scene_layer_engine_settings_update(SceneLayer *sl, Object *ob, const ces_ob = collection_engine_settings_create(ces_type); for (LayerCollection *lc = sl->layer_collections.first; lc; lc = lc->next) { - layer_collection_engine_settings_update(lc, &ces_layer, ob, ces_ob); + layer_collection_engine_settings_update(lc, &ces_layer, base, ces_ob); } BKE_layer_collection_engine_settings_free(&ces_layer); diff --git a/source/blender/draw/engines/clay/clay.c b/source/blender/draw/engines/clay/clay.c index 7cfefa25b46..0572f4a0dc9 100644 --- a/source/blender/draw/engines/clay/clay.c +++ b/source/blender/draw/engines/clay/clay.c @@ -538,8 +538,13 @@ static void override_setting(CollectionEngineSettings *ces, const char *name, vo { CollectionEngineProperty *cep = BKE_collection_engine_property_get(ces, name); - if (!cep) return; - //if ((cep->flag & COLLECTION_PROP_USE) == 0) return; + if (cep == NULL) { + return; + } + + if ((cep->flag & COLLECTION_PROP_USE) == 0) { + return; + } if (cep->type == COLLECTION_PROP_TYPE_INT) { CollectionEnginePropertyInt *prop = (CollectionEnginePropertyInt *)cep; |