[Bf-blender-cvs] [c97795b43af] compositor-full-frame: Compositor: Full frame Map Range node

Manuel Castilla noreply at git.blender.org
Mon Aug 16 19:43:43 CEST 2021


Commit: c97795b43af623a102576d6c846887327cc2317e
Author: Manuel Castilla
Date:   Mon Aug 16 11:30:52 2021 +0200
Branches: compositor-full-frame
https://developer.blender.org/rBc97795b43af623a102576d6c846887327cc2317e

Compositor: Full frame Map Range node

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

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

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

diff --git a/source/blender/compositor/operations/COM_MapRangeOperation.cc b/source/blender/compositor/operations/COM_MapRangeOperation.cc
index ada3cd6f159..6700d8d06f9 100644
--- a/source/blender/compositor/operations/COM_MapRangeOperation.cc
+++ b/source/blender/compositor/operations/COM_MapRangeOperation.cc
@@ -104,4 +104,43 @@ void MapRangeOperation::deinitExecution()
   this->m_destMaxOperation = nullptr;
 }
 
+void MapRangeOperation::update_memory_buffer_partial(MemoryBuffer *output,
+                                                     const rcti &area,
+                                                     Span<MemoryBuffer *> inputs)
+{
+  for (BuffersIterator<float> it = output->iterate_with(inputs, area); !it.is_end(); ++it) {
+    const float source_min = *it.in(1);
+    const float source_max = *it.in(2);
+    if (fabsf(source_max - source_min) < 1e-6f) {
+      it.out[0] = 0.0f;
+      continue;
+    }
+
+    float value = *it.in(0);
+    const float dest_min = *it.in(3);
+    const float dest_max = *it.in(4);
+    if (value >= -BLENDER_ZMAX && value <= BLENDER_ZMAX) {
+      value = (value - source_min) / (source_max - source_min);
+      value = dest_min + value * (dest_max - dest_min);
+    }
+    else if (value > BLENDER_ZMAX) {
+      value = dest_max;
+    }
+    else {
+      value = dest_min;
+    }
+
+    if (m_useClamp) {
+      if (dest_max > dest_min) {
+        CLAMP(value, dest_min, dest_max);
+      }
+      else {
+        CLAMP(value, dest_max, dest_min);
+      }
+    }
+
+    it.out[0] = value;
+  }
+}
+
 }  // namespace blender::compositor
diff --git a/source/blender/compositor/operations/COM_MapRangeOperation.h b/source/blender/compositor/operations/COM_MapRangeOperation.h
index a544c59887e..a01be14d528 100644
--- a/source/blender/compositor/operations/COM_MapRangeOperation.h
+++ b/source/blender/compositor/operations/COM_MapRangeOperation.h
@@ -18,7 +18,7 @@
 
 #pragma once
 
-#include "COM_NodeOperation.h"
+#include "COM_MultiThreadedOperation.h"
 #include "DNA_texture_types.h"
 
 namespace blender::compositor {
@@ -27,7 +27,7 @@ namespace blender::compositor {
  * this program converts an input color to an output value.
  * it assumes we are in sRGB color space.
  */
-class MapRangeOperation : public NodeOperation {
+class MapRangeOperation : public MultiThreadedOperation {
  private:
   /**
    * Cached reference to the inputProgram
@@ -68,6 +68,10 @@ class MapRangeOperation : public NodeOperation {
   {
     this->m_useClamp = value;
   }
+
+  void update_memory_buffer_partial(MemoryBuffer *output,
+                                    const rcti &area,
+                                    Span<MemoryBuffer *> inputs) override;
 };
 
 }  // namespace blender::compositor



More information about the Bf-blender-cvs mailing list