[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