[Bf-blender-cvs] [f20cc9e54c] blender2.8: Fix logic in CollectionEngineSetting update
Dalai Felinto
noreply at git.blender.org
Thu Feb 9 12:48:44 CET 2017
Commit: f20cc9e54cb0573e0dcf8c20002af766c765bb6e
Author: Dalai Felinto
Date: Thu Feb 9 12:48:39 2017 +0100
Branches: blender2.8
https://developer.blender.org/rBf20cc9e54cb0573e0dcf8c20002af766c765bb6e
Fix logic in CollectionEngineSetting update
Now Clay engine can show different materials per collection o/
===================================================================
M source/blender/blenkernel/intern/layer.c
M source/blender/draw/engines/clay/clay.c
===================================================================
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index a674d08442..ef4816af54 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 7cfefa25b4..0572f4a0dc 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;
More information about the Bf-blender-cvs
mailing list