diff options
author | Nathan Rozendaal <super_jo_nathan> | 2022-01-12 14:16:41 +0300 |
---|---|---|
committer | Jeroen Bakker <jeroen@blender.org> | 2022-01-12 14:29:44 +0300 |
commit | b2ccd8546c7249a5ce279210d45ddbb5e90cd10d (patch) | |
tree | 58c98093c9094fbd5038fb8dfd28398e5ee23484 /source/blender/compositor | |
parent | a2c1c368af48644fa8995ecbe7138cc0d7900c30 (diff) |
Compositor: Add Scene Time Node, Rename Time node
Fixes issue T94603
It adds a new compositor node called Scene Time which is already present as a geo node, having the same basic nodes available in all node trees is a nice thing to have.
Renames "Time" node to "Time Curve", this is done to avoid confusion between the Time node and the Scene Time node.
Reviewed By: jbakker
Maniphest Tasks: T94603
Differential Revision: https://developer.blender.org/D13762
Diffstat (limited to 'source/blender/compositor')
-rw-r--r-- | source/blender/compositor/CMakeLists.txt | 2 | ||||
-rw-r--r-- | source/blender/compositor/intern/COM_Converter.cc | 4 | ||||
-rw-r--r-- | source/blender/compositor/nodes/COM_SceneTimeNode.cc | 50 | ||||
-rw-r--r-- | source/blender/compositor/nodes/COM_SceneTimeNode.h | 36 |
4 files changed, 92 insertions, 0 deletions
diff --git a/source/blender/compositor/CMakeLists.txt b/source/blender/compositor/CMakeLists.txt index f59fd885871..96dc17c2d1a 100644 --- a/source/blender/compositor/CMakeLists.txt +++ b/source/blender/compositor/CMakeLists.txt @@ -147,6 +147,8 @@ set(SRC nodes/COM_TimeNode.h nodes/COM_ValueNode.cc nodes/COM_ValueNode.h + nodes/COM_SceneTimeNode.cc + nodes/COM_SceneTimeNode.h # output nodes nodes/COM_CompositorNode.cc diff --git a/source/blender/compositor/intern/COM_Converter.cc b/source/blender/compositor/intern/COM_Converter.cc index 1b98a04cf96..6cf6c698a2f 100644 --- a/source/blender/compositor/intern/COM_Converter.cc +++ b/source/blender/compositor/intern/COM_Converter.cc @@ -94,6 +94,7 @@ #include "COM_RotateNode.h" #include "COM_ScaleNode.h" #include "COM_ScaleOperation.h" +#include "COM_SceneTimeNode.h" #include "COM_SeparateColorNode.h" #include "COM_SetAlphaNode.h" #include "COM_SetValueOperation.h" @@ -360,6 +361,9 @@ Node *COM_convert_bnode(bNode *b_node) case CMP_NODE_TRANSFORM: node = new TransformNode(b_node); break; + case CMP_NODE_SCENE_TIME: + node = new SceneTimeNode(b_node); + break; case CMP_NODE_STABILIZE2D: node = new Stabilize2dNode(b_node); break; diff --git a/source/blender/compositor/nodes/COM_SceneTimeNode.cc b/source/blender/compositor/nodes/COM_SceneTimeNode.cc new file mode 100644 index 00000000000..f495db5ed4c --- /dev/null +++ b/source/blender/compositor/nodes/COM_SceneTimeNode.cc @@ -0,0 +1,50 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Copyright 2022, Blender Foundation. + */ + +#include "COM_SceneTimeNode.h" + +#include "COM_SetValueOperation.h" + +namespace blender::compositor { + +SceneTimeNode::SceneTimeNode(bNode *editor_node) : Node(editor_node) +{ + /* pass */ +} + +void SceneTimeNode::convert_to_operations(NodeConverter &converter, + const CompositorContext &context) const +{ + SetValueOperation *SecondOperation = new SetValueOperation(); + SetValueOperation *frameOperation = new SetValueOperation(); + + const int frameNumber = context.get_framenumber(); + const Scene* scene = context.get_scene(); + const double frameRate = (((double)scene->r.frs_sec) / (double)scene->r.frs_sec_base); + + SecondOperation->set_value(float(frameNumber / frameRate)); + converter.add_operation(SecondOperation); + + frameOperation->set_value(frameNumber); + converter.add_operation(frameOperation); + + converter.map_output_socket(get_output_socket(0), SecondOperation->get_output_socket()); + converter.map_output_socket(get_output_socket(1), frameOperation->get_output_socket()); +} + +} // namespace blender::compositor diff --git a/source/blender/compositor/nodes/COM_SceneTimeNode.h b/source/blender/compositor/nodes/COM_SceneTimeNode.h new file mode 100644 index 00000000000..62c502d26d2 --- /dev/null +++ b/source/blender/compositor/nodes/COM_SceneTimeNode.h @@ -0,0 +1,36 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Copyright 2022, Blender Foundation. + */ + +#pragma once + +#include "COM_Node.h" + +namespace blender::compositor { + +/** + * \brief SceneTimeNode + * \ingroup Node + */ +class SceneTimeNode : public Node { + public: + SceneTimeNode(bNode *editor_node); + void convert_to_operations(NodeConverter &converter, + const CompositorContext &context) const override; +}; + +} // namespace blender::compositor |