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
This commit is contained in:
parent
ebde6e1852
commit
ba5b4d1bd6
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue