[Bf-blender-cvs] [09d6ce320f4] temp-viewport-compositor-compiler: Viewport Compositor: Add Translate node

Omar Emara noreply at git.blender.org
Thu Apr 7 10:31:13 CEST 2022


Commit: 09d6ce320f4fda04bce2baf806a3f8c71677f72e
Author: Omar Emara
Date:   Thu Apr 7 10:28:30 2022 +0200
Branches: temp-viewport-compositor-compiler
https://developer.blender.org/rB09d6ce320f4fda04bce2baf806a3f8c71677f72e

Viewport Compositor: Add Translate node

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

M	source/blender/nodes/composite/nodes/node_composite_translate.cc

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

diff --git a/source/blender/nodes/composite/nodes/node_composite_translate.cc b/source/blender/nodes/composite/nodes/node_composite_translate.cc
index 6666d161b4a..f512b5baa1e 100644
--- a/source/blender/nodes/composite/nodes/node_composite_translate.cc
+++ b/source/blender/nodes/composite/nodes/node_composite_translate.cc
@@ -21,9 +21,14 @@
  * \ingroup cmpnodes
  */
 
+#include "BLI_math_vec_types.hh"
+#include "BLI_transformation_2d.hh"
+
 #include "UI_interface.h"
 #include "UI_resources.h"
 
+#include "NOD_compositor_execute.hh"
+
 #include "node_composite_util.hh"
 
 /* **************** Translate ******************** */
@@ -32,9 +37,19 @@ namespace blender::nodes::node_composite_translate_cc {
 
 static void cmp_node_translate_declare(NodeDeclarationBuilder &b)
 {
-  b.add_input<decl::Color>(N_("Image")).default_value({1.0f, 1.0f, 1.0f, 1.0f});
-  b.add_input<decl::Float>(N_("X")).default_value(0.0f).min(-10000.0f).max(10000.0f);
-  b.add_input<decl::Float>(N_("Y")).default_value(0.0f).min(-10000.0f).max(10000.0f);
+  b.add_input<decl::Color>(N_("Image"))
+      .default_value({1.0f, 1.0f, 1.0f, 1.0f})
+      .compositor_domain_priority(0);
+  b.add_input<decl::Float>(N_("X"))
+      .default_value(0.0f)
+      .min(-10000.0f)
+      .max(10000.0f)
+      .compositor_expects_single_value();
+  b.add_input<decl::Float>(N_("Y"))
+      .default_value(0.0f)
+      .min(-10000.0f)
+      .max(10000.0f)
+      .compositor_expects_single_value();
   b.add_output<decl::Color>(N_("Image"));
 }
 
@@ -50,6 +65,59 @@ static void node_composit_buts_translate(uiLayout *layout, bContext *UNUSED(C),
   uiItemR(layout, ptr, "wrap_axis", UI_ITEM_R_SPLIT_EMPTY_NAME, nullptr, ICON_NONE);
 }
 
+using namespace blender::viewport_compositor;
+
+class TranslateOperation : public NodeOperation {
+ public:
+  using NodeOperation::NodeOperation;
+
+  void execute() override
+  {
+    Result &input = get_input("Image");
+    Result &result = get_result("Image");
+    input.pass_through(result);
+
+    float x = get_input("X").get_float_value_default(0.0f);
+    float y = get_input("Y").get_float_value_default(0.0f);
+    if (get_use_relative()) {
+      x *= input.domain().size.x;
+      y *= input.domain().size.y;
+    }
+
+    const float2 translation = float2(x, y);
+    const Transformation2D transformation = Transformation2D::from_translation(translation);
+
+    result.transform(transformation);
+    result.get_realization_options().repeat_x = get_repeat_x();
+    result.get_realization_options().repeat_y = get_repeat_y();
+  }
+
+  NodeTranslateData &get_node_translate()
+  {
+    return *static_cast<NodeTranslateData *>(node().storage);
+  }
+
+  bool get_use_relative()
+  {
+    return get_node_translate().relative;
+  }
+
+  bool get_repeat_x()
+  {
+    return ELEM(get_node_translate().wrap_axis, CMP_NODE_WRAP_X, CMP_NODE_WRAP_XY);
+  }
+
+  bool get_repeat_y()
+  {
+    return ELEM(get_node_translate().wrap_axis, CMP_NODE_WRAP_Y, CMP_NODE_WRAP_XY);
+  }
+};
+
+static NodeOperation *get_compositor_operation(Context &context, DNode node)
+{
+  return new TranslateOperation(context, node);
+}
+
 }  // namespace blender::nodes::node_composite_translate_cc
 
 void register_node_type_cmp_translate()
@@ -64,6 +132,7 @@ void register_node_type_cmp_translate()
   node_type_init(&ntype, file_ns::node_composit_init_translate);
   node_type_storage(
       &ntype, "NodeTranslateData", node_free_standard_storage, node_copy_standard_storage);
+  ntype.get_compositor_operation = file_ns::get_compositor_operation;
 
   nodeRegisterType(&ntype);
 }



More information about the Bf-blender-cvs mailing list