Fix logic in CollectionEngineSetting update

Now Clay engine can show different materials per collection o/
This commit is contained in:
Dalai Felinto
2017-02-09 12:48:39 +01:00
parent 08399aca62
commit f20cc9e54c
2 changed files with 16 additions and 7 deletions

View File

@@ -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);

View File

@@ -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;