[Bf-blender-cvs] [e7d06c0bf22] temp-viewport-compositor-compiler: Viewport Compositor: Implement Rotate node
Omar Emara
noreply at git.blender.org
Thu Apr 7 10:31:13 CEST 2022
Commit: e7d06c0bf2215b890e345e194a28c62c6ac6e42a
Author: Omar Emara
Date: Fri Apr 1 19:03:19 2022 +0200
Branches: temp-viewport-compositor-compiler
https://developer.blender.org/rBe7d06c0bf2215b890e345e194a28c62c6ac6e42a
Viewport Compositor: Implement Rotate node
===================================================================
M source/blender/nodes/composite/nodes/node_composite_rotate.cc
M source/blender/nodes/composite/nodes/node_composite_transform.cc
===================================================================
diff --git a/source/blender/nodes/composite/nodes/node_composite_rotate.cc b/source/blender/nodes/composite/nodes/node_composite_rotate.cc
index 96ac4f3db5b..efa74b7fe72 100644
--- a/source/blender/nodes/composite/nodes/node_composite_rotate.cc
+++ b/source/blender/nodes/composite/nodes/node_composite_rotate.cc
@@ -21,9 +21,14 @@
* \ingroup cmpnodes
*/
+#include "BLI_assert.h"
+#include "BLI_transformation_2d.hh"
+
#include "UI_interface.h"
#include "UI_resources.h"
+#include "NOD_compositor_execute.hh"
+
#include "node_composite_util.hh"
/* **************** Rotate ******************** */
@@ -32,12 +37,15 @@ namespace blender::nodes::node_composite_rotate_cc {
static void cmp_node_rotate_declare(NodeDeclarationBuilder &b)
{
- b.add_input<decl::Color>(N_("Image")).default_value({1.0f, 1.0f, 1.0f, 1.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_("Degr"))
.default_value(0.0f)
.min(-10000.0f)
.max(10000.0f)
- .subtype(PROP_ANGLE);
+ .subtype(PROP_ANGLE)
+ .compositor_expects_single_value();
b.add_output<decl::Color>(N_("Image"));
}
@@ -51,6 +59,47 @@ static void node_composit_buts_rotate(uiLayout *layout, bContext *UNUSED(C), Poi
uiItemR(layout, ptr, "filter_type", UI_ITEM_R_SPLIT_EMPTY_NAME, "", ICON_NONE);
}
+using namespace blender::viewport_compositor;
+
+class RotateOperation : public NodeOperation {
+ public:
+ using NodeOperation::NodeOperation;
+
+ void execute() override
+ {
+ Result &input = get_input("Image");
+ Result &result = get_result("Image");
+ input.pass_through(result);
+
+ const float rotation = get_input("Degr").get_float_value_default(0.0f);
+
+ const Transformation2D transformation = Transformation2D::from_rotation(rotation);
+
+ result.transform(transformation);
+ result.set_realization_interpolation(get_interpolation());
+ }
+
+ Interpolation get_interpolation()
+ {
+ switch (node().custom1) {
+ case 0:
+ return Interpolation::Nearest;
+ case 1:
+ return Interpolation::Bilinear;
+ case 2:
+ return Interpolation::Bicubic;
+ }
+
+ BLI_assert_unreachable();
+ return Interpolation::Nearest;
+ }
+};
+
+static NodeOperation *get_compositor_operation(Context &context, DNode node)
+{
+ return new RotateOperation(context, node);
+}
+
} // namespace blender::nodes::node_composite_rotate_cc
void register_node_type_cmp_rotate()
@@ -63,6 +112,7 @@ void register_node_type_cmp_rotate()
ntype.declare = file_ns::cmp_node_rotate_declare;
ntype.draw_buttons = file_ns::node_composit_buts_rotate;
node_type_init(&ntype, file_ns::node_composit_init_rotate);
+ ntype.get_compositor_operation = file_ns::get_compositor_operation;
nodeRegisterType(&ntype);
}
diff --git a/source/blender/nodes/composite/nodes/node_composite_transform.cc b/source/blender/nodes/composite/nodes/node_composite_transform.cc
index 0d314a4d20e..001ad932fbc 100644
--- a/source/blender/nodes/composite/nodes/node_composite_transform.cc
+++ b/source/blender/nodes/composite/nodes/node_composite_transform.cc
@@ -23,6 +23,7 @@
#include "BLI_assert.h"
#include "BLI_math_vector.h"
+#include "BLI_transformation_2d.hh"
#include "UI_interface.h"
#include "UI_resources.h"
@@ -37,7 +38,9 @@ namespace blender::nodes::node_composite_transform_cc {
static void cmp_node_transform_declare(NodeDeclarationBuilder &b)
{
- b.add_input<decl::Color>(N_("Image")).default_value({0.8f, 0.8f, 0.8f, 1.0f});
+ b.add_input<decl::Color>(N_("Image"))
+ .default_value({0.8f, 0.8f, 0.8f, 1.0f})
+ .compositor_domain_priority(0);
b.add_input<decl::Float>(N_("X"))
.default_value(0.0f)
.min(-10000.0f)
More information about the Bf-blender-cvs
mailing list