[Bf-blender-cvs] [456a989d2eb] compositor-full-frame: Compositor: Full frame Track Position node

Manuel Castilla noreply at git.blender.org
Fri Jul 23 19:23:13 CEST 2021


Commit: 456a989d2eb220e138884a2d2d7488d377630e89
Author: Manuel Castilla
Date:   Fri Jul 23 19:06:38 2021 +0200
Branches: compositor-full-frame
https://developer.blender.org/rB456a989d2eb220e138884a2d2d7488d377630e89

Compositor: Full frame Track Position node

Adds full frame implementation to this node operation.
No functional changes.

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

M	source/blender/compositor/operations/COM_TrackPositionOperation.cc
M	source/blender/compositor/operations/COM_TrackPositionOperation.h

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

diff --git a/source/blender/compositor/operations/COM_TrackPositionOperation.cc b/source/blender/compositor/operations/COM_TrackPositionOperation.cc
index 993410e3e84..1d24cba0a97 100644
--- a/source/blender/compositor/operations/COM_TrackPositionOperation.cc
+++ b/source/blender/compositor/operations/COM_TrackPositionOperation.cc
@@ -42,6 +42,8 @@ TrackPositionOperation::TrackPositionOperation()
   this->m_relativeFrame = 0;
   this->m_speed_output = false;
   flags.is_set_operation = true;
+  flags.is_fullframe_operation = true;
+  flags.can_be_constant = true;
 }
 
 void TrackPositionOperation::initExecution()
@@ -131,6 +133,23 @@ void TrackPositionOperation::executePixelSampled(float output[4],
   }
 }
 
+void TrackPositionOperation::update_memory_buffer(MemoryBuffer *output,
+                                                  const rcti &area,
+                                                  Span<MemoryBuffer *> UNUSED(inputs))
+{
+  /* Should always be folded into a constant operation because there are no inputs and
+   * can_be_constant flag is enabled. */
+  BLI_assert(BLI_rcti_size_x(&area) == 1 && BLI_rcti_size_y(&area) == 1);
+  float *out = output->get_elem(area.xmin, area.ymin);
+  out[0] = this->m_markerPos[this->m_axis] - this->m_relativePos[this->m_axis];
+  if (this->m_axis == 0) {
+    out[0] *= this->m_width;
+  }
+  else {
+    out[0] *= this->m_height;
+  }
+}
+
 void TrackPositionOperation::determineResolution(unsigned int resolution[2],
                                                  unsigned int preferredResolution[2])
 {
diff --git a/source/blender/compositor/operations/COM_TrackPositionOperation.h b/source/blender/compositor/operations/COM_TrackPositionOperation.h
index b0b0a123bd6..6916b5cbbff 100644
--- a/source/blender/compositor/operations/COM_TrackPositionOperation.h
+++ b/source/blender/compositor/operations/COM_TrackPositionOperation.h
@@ -93,6 +93,10 @@ class TrackPositionOperation : public NodeOperation {
   void initExecution() override;
 
   void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override;
+
+  void update_memory_buffer(MemoryBuffer *output,
+                            const rcti &area,
+                            Span<MemoryBuffer *> inputs) override;
 };
 
 }  // namespace blender::compositor



More information about the Bf-blender-cvs mailing list