Commit: 9de3f7834e0fa24486e6aca95100fd0984b42aaa Author: Omar Emara Date: Thu Feb 17 11:29:59 2022 +0200 Branches: temp-viewport-compositor-compiler https://developer.blender.org/rB9de3f7834e0fa24486e6aca95100fd0984b42aaa
Viewport Compositor: Fix unlinked socket evaluation This patch fixes wrong evaluation of unlinked sockets, wrong computations of default values, and missed nodes in operations instantiation. =================================================================== M source/blender/nodes/NOD_compositor_execute.hh M source/blender/nodes/intern/node_compositor_execute.cc =================================================================== diff --git a/source/blender/nodes/NOD_compositor_execute.hh b/source/blender/nodes/NOD_compositor_execute.hh index 8d6e40c21b0..7b1be28bf82 100644 --- a/source/blender/nodes/NOD_compositor_execute.hh +++ b/source/blender/nodes/NOD_compositor_execute.hh @@ -185,7 +185,7 @@ class Operation { * the output results. This includes the output textures as well as any temporary intermediate * buffers used by the operation. The texture pool provided by the context should be used to any * texture allocations. */ - virtual void initialize() = 0; + virtual void initialize(); /* This method should execute the operation, compute its outputs, and write them to the * appropriate result. */ diff --git a/source/blender/nodes/intern/node_compositor_execute.cc b/source/blender/nodes/intern/node_compositor_execute.cc index 9a0dc4b38b9..48110019291 100644 --- a/source/blender/nodes/intern/node_compositor_execute.cc +++ b/source/blender/nodes/intern/node_compositor_execute.cc @@ -139,6 +139,10 @@ Operation::Operation(Context &context) : context_(context) { } +void Operation::initialize() +{ +} + void Operation::release() { } @@ -232,20 +236,19 @@ void SingleValueInputOperation::initialize() add_result(output_identifier, result); } -/* Copy the default value of the member socket to the output result. The default value is a pointer - * to a float array having the same number of elements as the socket type components. */ +/* Copy the default value of the member socket to the output result. */ void SingleValueInputOperation::execute() { Result &result = get_result(output_identifier); switch (input_->bsocket()->type) { case SOCK_FLOAT: - result.data.value = *input_->default_value<float>(); + result.data.value = input_->default_value<bNodeSocketValueFloat>()->value; return; case SOCK_VECTOR: - copy_v3_v3(result.data.vector, *input_->default_value<float[3]>()); + copy_v3_v3(result.data.vector, input_->default_value<bNodeSocketValueVector>()->value); return; case SOCK_RGBA: - copy_v4_v4(result.data.color, *input_->default_value<float[4]>()); + copy_v4_v4(result.data.color, input_->default_value<bNodeSocketValueRGBA>()->value); return; default: BLI_assert_unreachable(); @@ -346,16 +349,16 @@ bool Evaluator::is_valid(DNode output_node) * reachable nodes, adding the instances to node_operations_. */ void Evaluator::create_node_operations(DNode node) { + const bNodeType *type = node->typeinfo(); + NodeOperation *operation = type->get_compositor_operation(context, node); + node_operations_.add_new(node, operation); + for (const InputSocketRef *input_ref : node->inputs()) { const DInputSocket input{node.context(), input_ref}; input.foreach_origin_socket([&](const DSocket origin) { - if (node_operations_.contains(origin.node())) { - return; + if (!node_operations_.contains(origin.node())) { + create_node_operations(origin.node()); } - bNodeType *type = origin.node()->typeinfo(); - NodeOperation *operation = type->get_compositor_operation(context, origin.node()); - node_operations_.add_new(origin.node(), operation); - create_node_operations(origin.node()); }); } } @@ -495,7 +498,7 @@ void Evaluator::map_node_inputs_to_results(DNode node) void Evaluator::map_node_input_to_result(DInputSocket input) { /* The input is unlinked. */ - if (!input->logically_linked_sockets().is_empty()) { + if (input->logically_linked_sockets().is_empty()) { map_node_unlinked_input_to_result(input); return; } _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs