Fix #115207: Dynamically typed Viewer node #115130

Merged
Jacques Lucke merged 2 commits from mod_moder/blender:fix_dynamicly_typed_viewer into main 2023-11-21 10:43:35 +01:00
1 changed files with 18 additions and 14 deletions

View File

@ -50,6 +50,7 @@
#include "BLT_translation.h"
#include "NOD_node_declaration.hh"
#include "NOD_socket.hh"
#include "NOD_socket_declarations.hh"
#include "NOD_socket_declarations_geometry.hh"
@ -447,21 +448,24 @@ static bNodeSocket *node_link_viewer_get_socket(bNodeTree &ntree,
return (bNodeSocket *)viewer_node.inputs.first;
}
/* For the geometry nodes viewer, find the socket with the correct type. */
LISTBASE_FOREACH (bNodeSocket *, viewer_socket, &viewer_node.inputs) {
if (viewer_socket->type == src_socket.type) {
if (viewer_socket->type == SOCK_GEOMETRY) {
return viewer_socket;
}
NodeGeometryViewer *storage = (NodeGeometryViewer *)viewer_node.storage;
const eCustomDataType data_type = *bke::socket_type_to_custom_data_type(
eNodeSocketDatatype(src_socket.type));
BLI_assert(data_type != CD_AUTO_FROM_NAME);
storage->data_type = data_type;
viewer_node.typeinfo->updatefunc(&ntree, &viewer_node);
return viewer_socket;
}
if (src_socket.type == SOCK_GEOMETRY) {
return static_cast<bNodeSocket *>(viewer_node.inputs.first);
}
return nullptr;
ntree.ensure_topology_cache();
if (!socket_can_be_viewed(src_socket.owner_node(), src_socket)) {
return nullptr;
}
NodeGeometryViewer &storage = *static_cast<NodeGeometryViewer *>(viewer_node.storage);
const eCustomDataType data_type = *bke::socket_type_to_custom_data_type(
eNodeSocketDatatype(src_socket.type));
BLI_assert(data_type != CD_AUTO_FROM_NAME);
storage.data_type = data_type;
nodes::update_node_declaration_and_sockets(ntree, viewer_node);
return static_cast<bNodeSocket *>(viewer_node.inputs.last);
}
static bool is_viewer_node(const bNode &node)