Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Kim <pk15950@gmail.com>2022-09-08 07:00:12 +0300
committerPeter Kim <pk15950@gmail.com>2022-09-08 07:00:12 +0300
commit00dcfdf916c69672210b006e62d966f1bc2fbeb7 (patch)
tree0cbb1b91fe26c750197126085b74224a795a103c /source/blender/compositor/realtime_compositor/intern/node_operation.cc
parenta39532670f6b668da7be5810fb1f844b82feeba3 (diff)
parentd5934974219135102f364f57c45a8b1465e2b8d9 (diff)
Merge branch 'master' into xr-devxr-dev
Diffstat (limited to 'source/blender/compositor/realtime_compositor/intern/node_operation.cc')
-rw-r--r--source/blender/compositor/realtime_compositor/intern/node_operation.cc67
1 files changed, 67 insertions, 0 deletions
diff --git a/source/blender/compositor/realtime_compositor/intern/node_operation.cc b/source/blender/compositor/realtime_compositor/intern/node_operation.cc
new file mode 100644
index 00000000000..1c20c967ddb
--- /dev/null
+++ b/source/blender/compositor/realtime_compositor/intern/node_operation.cc
@@ -0,0 +1,67 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include <memory>
+
+#include "BLI_map.hh"
+#include "BLI_string_ref.hh"
+#include "BLI_vector.hh"
+
+#include "DNA_node_types.h"
+
+#include "NOD_derived_node_tree.hh"
+#include "NOD_node_declaration.hh"
+
+#include "COM_context.hh"
+#include "COM_input_descriptor.hh"
+#include "COM_node_operation.hh"
+#include "COM_operation.hh"
+#include "COM_result.hh"
+#include "COM_scheduler.hh"
+#include "COM_utilities.hh"
+
+namespace blender::realtime_compositor {
+
+using namespace nodes::derived_node_tree_types;
+
+NodeOperation::NodeOperation(Context &context, DNode node) : Operation(context), node_(node)
+{
+ for (const bNodeSocket *output : node->output_sockets()) {
+ const ResultType result_type = get_node_socket_result_type(output);
+ const Result result = Result(result_type, texture_pool());
+ populate_result(output->identifier, result);
+ }
+
+ for (const bNodeSocket *input : node->input_sockets()) {
+ const InputDescriptor input_descriptor = input_descriptor_from_input_socket(input);
+ declare_input_descriptor(input->identifier, input_descriptor);
+ }
+}
+
+void NodeOperation::compute_results_reference_counts(const Schedule &schedule)
+{
+ for (const bNodeSocket *output : this->node()->output_sockets()) {
+ const DOutputSocket doutput{node().context(), output};
+
+ const int reference_count = number_of_inputs_linked_to_output_conditioned(
+ doutput, [&](DInputSocket input) { return schedule.contains(input.node()); });
+
+ get_result(doutput->identifier).set_initial_reference_count(reference_count);
+ }
+}
+
+const DNode &NodeOperation::node() const
+{
+ return node_;
+}
+
+const bNode &NodeOperation::bnode() const
+{
+ return *node_;
+}
+
+bool NodeOperation::should_compute_output(StringRef identifier)
+{
+ return get_result(identifier).should_compute();
+}
+
+} // namespace blender::realtime_compositor