[Bf-blender-cvs] [ab4c98d9437] temp-viewport-compositor-compiler: Viewport Compositor: Implement Scene Time node
Omar Emara
noreply at git.blender.org
Wed Mar 30 16:55:16 CEST 2022
Commit: ab4c98d943745592a616fa23fce0296c6d18f82f
Author: Omar Emara
Date: Wed Mar 30 16:22:38 2022 +0200
Branches: temp-viewport-compositor-compiler
https://developer.blender.org/rBab4c98d943745592a616fa23fce0296c6d18f82f
Viewport Compositor: Implement Scene Time node
===================================================================
M source/blender/nodes/composite/nodes/node_composite_scene_time.cc
===================================================================
diff --git a/source/blender/nodes/composite/nodes/node_composite_scene_time.cc b/source/blender/nodes/composite/nodes/node_composite_scene_time.cc
index 5c53c1df237..62a625edccb 100644
--- a/source/blender/nodes/composite/nodes/node_composite_scene_time.cc
+++ b/source/blender/nodes/composite/nodes/node_composite_scene_time.cc
@@ -17,6 +17,8 @@
* \ingroup cmpnodes
*/
+#include "NOD_compositor_execute.hh"
+
#include "node_composite_util.hh"
namespace blender::nodes {
@@ -27,6 +29,46 @@ static void cmp_node_scene_time_declare(NodeDeclarationBuilder &b)
b.add_output<decl::Float>(N_("Frame"));
}
+using namespace blender::viewport_compositor;
+
+class SceneTimeOperation : public NodeOperation {
+ public:
+ using NodeOperation::NodeOperation;
+
+ void execute() override
+ {
+ execute_seconds();
+ execute_frame();
+ }
+
+ void execute_seconds()
+ {
+ Result &result = get_result("Seconds");
+ result.allocate_single_value();
+
+ const int frame_number = static_cast<float>(context().get_scene()->r.cfra);
+ const float frame_rate = static_cast<float>(context().get_scene()->r.frs_sec) /
+ static_cast<float>(context().get_scene()->r.frs_sec_base);
+
+ result.set_float_value(frame_number / frame_rate);
+ }
+
+ void execute_frame()
+ {
+ Result &result = get_result("Frame");
+ result.allocate_single_value();
+
+ const int frame_number = static_cast<float>(context().get_scene()->r.cfra);
+
+ result.set_float_value(frame_number);
+ }
+};
+
+static NodeOperation *get_compositor_operation(Context &context, DNode node)
+{
+ return new SceneTimeOperation(context, node);
+}
+
} // namespace blender::nodes
void register_node_type_cmp_scene_time()
@@ -35,5 +77,7 @@ void register_node_type_cmp_scene_time()
cmp_node_type_base(&ntype, CMP_NODE_SCENE_TIME, "Scene Time", NODE_CLASS_INPUT);
ntype.declare = blender::nodes::cmp_node_scene_time_declare;
+ ntype.get_compositor_operation = blender::nodes::get_compositor_operation;
+
nodeRegisterType(&ntype);
}
More information about the Bf-blender-cvs
mailing list