From ba5b4d1bd68e8b9a12279d8be9e6d84f496bd44b Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Wed, 26 May 2021 16:06:01 +0200 Subject: Fix T88250: crash when instancing object in disabled collection This issue was that `BKE_object_eval_uber_data` was not called for the text object, because its geometry was not dependent upon and its `is_directly_visible` tag was `false`. The crash happens in rendering code, because the evaluated data is missing. This not only affects text objects, but all object types that have a geometry component that geometry nodes does not support yet. The solution is to just add the missing dependencies. Differential Revision: https://developer.blender.org/D11385 --- source/blender/depsgraph/DEG_depsgraph_build.h | 2 ++ source/blender/depsgraph/intern/depsgraph_build.cc | 6 ++++++ source/blender/modifiers/intern/MOD_nodes.cc | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/source/blender/depsgraph/DEG_depsgraph_build.h b/source/blender/depsgraph/DEG_depsgraph_build.h index 5f9e78837a7..b4acf9b010c 100644 --- a/source/blender/depsgraph/DEG_depsgraph_build.h +++ b/source/blender/depsgraph/DEG_depsgraph_build.h @@ -189,6 +189,8 @@ void DEG_add_customdata_mask(struct DepsNodeHandle *handle, struct ID *DEG_get_id_from_handle(struct DepsNodeHandle *node_handle); struct Depsgraph *DEG_get_graph_from_handle(struct DepsNodeHandle *node_handle); +bool DEG_object_has_geometry_component(struct Object *object); + /* ************************************************ */ #ifdef __cplusplus diff --git a/source/blender/depsgraph/intern/depsgraph_build.cc b/source/blender/depsgraph/intern/depsgraph_build.cc index 6c1e91d068b..9e9191c5ab9 100644 --- a/source/blender/depsgraph/intern/depsgraph_build.cc +++ b/source/blender/depsgraph/intern/depsgraph_build.cc @@ -62,6 +62,7 @@ #include "intern/depsgraph_registry.h" #include "intern/depsgraph_relation.h" +#include "intern/depsgraph_tag.h" #include "intern/depsgraph_type.h" /* ****************** */ @@ -109,6 +110,11 @@ void DEG_add_object_relation(DepsNodeHandle *node_handle, deg_node_handle->builder->add_node_handle_relation(comp_key, deg_node_handle, description); } +bool DEG_object_has_geometry_component(Object *object) +{ + return deg::geometry_tag_to_component(&object->id) != deg::NodeType::UNDEFINED; +} + void DEG_add_collection_geometry_relation(DepsNodeHandle *node_handle, Collection *collection, const char *description) diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc index d808052e5f5..fd3634ad278 100644 --- a/source/blender/modifiers/intern/MOD_nodes.cc +++ b/source/blender/modifiers/intern/MOD_nodes.cc @@ -185,7 +185,7 @@ static void add_object_relation(const ModifierUpdateDepsgraphContext *ctx, Objec if (object.type == OB_EMPTY && object.instance_collection != nullptr) { add_collection_relation(ctx, *object.instance_collection); } - else if (ELEM(object.type, OB_MESH, OB_POINTCLOUD, OB_VOLUME)) { + else if (DEG_object_has_geometry_component(&object)) { DEG_add_object_relation(ctx->node, &object, DEG_OB_COMP_GEOMETRY, "Nodes Modifier"); DEG_add_customdata_mask(ctx->node, &object, &dependency_data_mask); } -- cgit v1.2.3