[Bf-blender-cvs] [2b9e3e4e5a1] temp-geometry-nodes-evaluator-refactor: Merge branch 'master' into temp-geometry-nodes-evaluator-refactor

Jacques Lucke noreply at git.blender.org
Tue Sep 6 17:40:35 CEST 2022


Commit: 2b9e3e4e5a15e607891d45d6c0dc60fc148644be
Author: Jacques Lucke
Date:   Tue Sep 6 17:37:20 2022 +0200
Branches: temp-geometry-nodes-evaluator-refactor
https://developer.blender.org/rB2b9e3e4e5a15e607891d45d6c0dc60fc148644be

Merge branch 'master' into temp-geometry-nodes-evaluator-refactor

===================================================================



===================================================================

diff --cc source/blender/editors/space_node/node_draw.cc
index ec7379a2de3,507748e68bc..095d70ed37f
--- a/source/blender/editors/space_node/node_draw.cc
+++ b/source/blender/editors/space_node/node_draw.cc
@@@ -323,511 -308,178 +323,514 @@@ float2 node_from_view(const bNode &node
    return result;
  }
  
 -/**
 - * Based on settings and sockets in node, set drawing rect info.
 - */
 -static void node_update_basis(const bContext &C, bNodeTree &ntree, bNode &node, uiBlock &block)
 +static GeoTreeLog *get_geo_tree_log(SpaceNode &snode)
  {
 -  PointerRNA nodeptr;
 -  RNA_pointer_create(&ntree.id, &RNA_Node, &node, &nodeptr);
 -
 -  const bool node_options = node.typeinfo->draw_buttons && (node.flag & NODE_OPTIONS);
 -  const bool inputs_first = node.inputs.first &&
 -                            !(node.outputs.first || (node.flag & NODE_PREVIEW) || node_options);
 -
 -  /* Get "global" coordinates. */
 -  float2 loc = node_to_view(node, float2(0));
 -  /* Round the node origin because text contents are always pixel-aligned. */
 -  loc.x = round(loc.x);
 -  loc.y = round(loc.y);
 -
 -  int dy = loc.y;
 +  using namespace blender;
 +  using namespace blender::nodes;
 +  using namespace blender::nodes::geo_eval_log;
  
 -  /* Header. */
 -  dy -= NODE_DY;
 +  ContextStackBuilder context_stack_builder;
  
 -  /* Add a little bit of padding above the top socket. */
 -  if (node.outputs.first || inputs_first) {
 -    dy -= NODE_DYS / 2;
 +  if (snode.id == nullptr) {
 +    return nullptr;
    }
 -
 -  /* Output sockets. */
 -  bool add_output_space = false;
 -
 -  int buty;
 -  LISTBASE_FOREACH (bNodeSocket *, socket, &node.outputs) {
 -    if (nodeSocketIsHidden(socket)) {
 -      continue;
 -    }
 -
 -    PointerRNA sockptr;
 -    RNA_pointer_create(&ntree.id, &RNA_NodeSocket, socket, &sockptr);
 -
 -    uiLayout *layout = UI_block_layout(&block,
 -                                       UI_LAYOUT_VERTICAL,
 -                                       UI_LAYOUT_PANEL,
 -                                       loc.x + NODE_DYS,
 -                                       dy,
 -                                       NODE_WIDTH(node) - NODE_DY,
 -                                       NODE_DY,
 -                                       0,
 -                                       UI_style_get_dpi());
 -
 -    if (node.flag & NODE_MUTED) {
 -      uiLayoutSetActive(layout, false);
 +  if (GS(snode.id->name) != ID_OB) {
 +    return nullptr;
 +  }
 +  Object *object = reinterpret_cast<Object *>(snode.id);
 +  NodesModifierData *nmd = nullptr;
 +  LISTBASE_FOREACH (ModifierData *, md_iter, &object->modifiers) {
 +    if (md_iter->type == eModifierType_Nodes) {
 +      NodesModifierData *nmd_iter = reinterpret_cast<NodesModifierData *>(md_iter);
 +      if (nmd_iter->node_group == snode.nodetree) {
 +        nmd = nmd_iter;
 +        break;
 +      }
      }
 +  }
 +  if (nmd == nullptr) {
 +    return nullptr;
 +  }
 +  if (nmd->runtime_eval_log == nullptr) {
 +    return nullptr;
 +  }
 +  GeoModifierLog &modifier_log = *static_cast<GeoModifierLog *>(nmd->runtime_eval_log);
 +  context_stack_builder.push<ModifierContextStack>(nmd->modifier.name);
 +  Vector<const bNodeTreePath *> tree_path_vec{snode.treepath};
 +  if (tree_path_vec.is_empty()) {
 +    return nullptr;
 +  }
 +  for (const bNodeTreePath *path : tree_path_vec.as_span().drop_front(1)) {
 +    context_stack_builder.push<NodeGroupContextStack>(path->node_name,
 +                                                      path->nodetree->id.name + 2);
 +  }
  
 -    /* Context pointers for current node and socket. */
 -    uiLayoutSetContextPointer(layout, "node", &nodeptr);
 -    uiLayoutSetContextPointer(layout, "socket", &sockptr);
 -
 -    /* Align output buttons to the right. */
 -    uiLayout *row = uiLayoutRow(layout, true);
 -    uiLayoutSetAlignment(row, UI_LAYOUT_ALIGN_RIGHT);
 -    const char *socket_label = nodeSocketLabel(socket);
 -    socket->typeinfo->draw((bContext *)&C, row, &sockptr, &nodeptr, IFACE_(socket_label));
 -
 -    node_socket_add_tooltip(ntree, node, *socket, *row);
 -
 -    UI_block_align_end(&block);
 -    UI_block_layout_resolve(&block, nullptr, &buty);
 -
 -    /* Ensure minimum socket height in case layout is empty. */
 -    buty = min_ii(buty, dy - NODE_DY);
 -
 -    /* Round the socket location to stop it from jiggling. */
 -    socket->locx = round(loc.x + NODE_WIDTH(node));
 -    socket->locy = round(dy - NODE_DYS);
 +  return &modifier_log.get_tree_log(context_stack_builder.hash());
 +}
  
 -    dy = buty;
 -    if (socket->next) {
 -      dy -= NODE_SOCKDY;
 -    }
 +struct SocketTooltipData {
-   bNodeTree *ntree;
-   bNode *node;
-   bNodeSocket *socket;
++  const bNodeTree *ntree;
++  const bNode *node;
++  const bNodeSocket *socket;
 +};
  
- static bool node_socket_has_tooltip(bNodeTree *ntree, bNodeSocket *socket)
 -    add_output_space = true;
++static bool node_socket_has_tooltip(const bNodeTree *ntree, const bNodeSocket *socket)
 +{
 +  if (ntree->type == NTREE_GEOMETRY) {
 +    return true;
    }
  
 -  if (add_output_space) {
 -    dy -= NODE_DY / 4;
 +  if (socket->runtime->declaration != nullptr) {
 +    const blender::nodes::SocketDeclaration &socket_decl = *socket->runtime->declaration;
 +    return !socket_decl.description().is_empty();
    }
  
 -  node.prvr.xmin = loc.x + NODE_DYS;
 -  node.prvr.xmax = loc.x + NODE_WIDTH(node) - NODE_DYS;
 -
 -  /* preview rect? */
 -  if (node.flag & NODE_PREVIEW) {
 -    float aspect = 1.0f;
 +  return false;
 +}
  
 -    if (node.preview_xsize && node.preview_ysize) {
 -      aspect = (float)node.preview_ysize / (float)node.preview_xsize;
 +static blender::nodes::geo_eval_log::ValueLog *find_socket_value_log(
 +    GeoTreeLog &tree_log, const bNodeSocket &query_socket)
 +{
 +  using namespace blender::nodes::geo_eval_log;
 +  tree_log.ensure_socket_values();
 +
 +  if (query_socket.is_multi_input()) {
 +    return nullptr;
 +  }
 +
 +  Set<const bNodeSocket *> added_sockets;
 +  Stack<const bNodeSocket *> sockets_to_check;
 +  sockets_to_check.push(&query_socket);
 +  added_sockets.add(&query_socket);
 +
 +  while (!sockets_to_check.is_empty()) {
 +    const bNodeSocket &socket = *sockets_to_check.pop();
 +    const bNode &node = socket.owner_node();
 +    if (GeoNodeLog *node_log = tree_log.nodes.lookup_ptr(node.name)) {
 +      ValueLog *value_log = socket.is_input() ?
 +                                node_log->input_values_.lookup_default(socket.identifier,
 +                                                                       nullptr) :
 +                                node_log->output_values_.lookup_default(socket.identifier,
 +                                                                        nullptr);
 +      if (value_log != nullptr) {
 +        return value_log;
 +      }
      }
  
 -    dy -= NODE_DYS / 2;
 -    node.prvr.ymax = dy;
 -
 -    if (aspect <= 1.0f) {
 -      node.prvr.ymin = dy - aspect * (NODE_WIDTH(node) - NODE_DY);
 +    if (socket.is_input()) {
 +      const Span<const bNodeLink *> links = socket.directly_linked_links();
 +      for (const bNodeLink *link : links) {
 +        const bNodeSocket &from_socket = *link->fromsock;
 +        if (added_sockets.add(&from_socket)) {
 +          sockets_to_check.push(&from_socket);
 +        }
 +      }
      }
      else {
 -      /* Width correction of image. XXX huh? (ton) */
 -      float dx = (NODE_WIDTH(node) - NODE_DYS) - (NODE_WIDTH(node) - NODE_DYS) / aspect;
 -
 -      node.prvr.ymin = dy - (NODE_WIDTH(node) - NODE_DY);
 -
 -      node.prvr.xmin += 0.5f * dx;
 -      node.prvr.xmax -= 0.5f * dx;
 -    }
 -
 -    dy = node.prvr.ymin - NODE_DYS / 2;
 -
 -    /* Make sure that maximums are bigger or equal to minimums. */
 -    if (node.prvr.xmax < node.prvr.xmin) {
 -      SWAP(float, node.prvr.xmax, node.prvr.xmin);
 -    }
 -    if (node.prvr.ymax < node.prvr.ymin) {
 -      SWAP(float, node.prvr.ymax, node.prvr.ymin);
 +      if (node.is_reroute()) {
 +        const bNodeSocket &input_socket = node.input_socket(0);
 +        if (added_sockets.add(&input_socket)) {
 +          sockets_to_check.push(&input_socket);
 +        }
 +        const Span<const bNodeLink *> links = input_socket.directly_linked_links();
 +        for (const bNodeLink *link : links) {
 +          const bNodeSocket &from_socket = *link->fromsock;
 +          if (added_sockets.add(&from_socket)) {
 +            sockets_to_check.push(&from_socket);
 +          }
 +        }
 +      }
 +      else if (node.is_muted()) {
 +        if (const bNodeSocket *input_socket = socket.internal_link_input()) {
 +          if (added_sockets.add(input_socket)) {
 +            sockets_to_check.push(input_socket);
 +          }
 +          const Span<const bNodeLink *> links = input_socket->directly_linked_links();
 +          for (const bNodeLink *link : links) {
 +            const bNodeSocket &from_socket = *link->fromsock;
 +            if (added_sockets.add(&from_socket)) {
 +              sockets_to_check.push(&from_socket);
 +            }
 +          }
 +        }
 +      }
      }
    }
  
 -  /* Buttons rect? */
 -  if (node_options) {
 -    dy -= NODE_DYS / 2;
 -
 -    uiLayout *layout = UI_block_layout(&block,
 -                                       UI_LAYOUT_VERTICAL,
 -                                       UI_LAYOUT_PANEL,
 -                                       loc.x + NODE_DYS,
 -                                       dy,
 -                                       NODE_WIDTH(node) - NODE_DY,
 -                                       0,
 -                                       0,
 -                                       UI_style_get_dpi());
 -
 -    if (node.flag & NODE_MUTED) {
 -      uiLayoutSetActive(layout, false);
 -    }
 +  return nullptr;
 +}
  
 -    uiLayoutSetContextPointer(layout, "node", &nodeptr);
 +static void create_inspection_string_for_generic_value(const GPointer value, std::stringstream &ss)
 +{
 +  auto id_to_inspection_string = [&](const ID *id, const short idcode) {
 +    ss << (id ? id->name + 2 : TIP_("None")) << " (" << TIP_(BKE_idtype_idcode_to_name(idcode))
 +       << ")";
 +  };
  
 -    node.typeinfo->draw_buttons(layout, (bContext *)&

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list