[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