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:
authorDalai Felinto <dfelinto@gmail.com>2017-02-09 14:48:39 +0300
committerDalai Felinto <dfelinto@gmail.com>2017-02-09 14:48:39 +0300
commitf20cc9e54cb0573e0dcf8c20002af766c765bb6e (patch)
tree75a4ff5cb597a23d9b5bfab83c5ccad8510cc658 /source/blender
parent08399aca62975741f407703ff40bf2060ee3b758 (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.c14
-rw-r--r--source/blender/draw/engines/clay/clay.c9
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;