Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManuel Castilla <manzanillawork@gmail.com>2021-07-05 22:43:44 +0300
committerManuel Castilla <manzanillawork@gmail.com>2021-07-06 00:36:43 +0300
commit3d9ecf1cf26e5b55f1d961c9068e20c63d5c03b0 (patch)
tree24d7044b1ec22b50346b2757dd98ad8680180e1d
parent0c90aa097d0eb2f4faf91974113edb2b60599c9c (diff)
Compositor: Full frame Color Balance node
Adds full frame implementation to this node operations. No functional changes. 1.3x faster than tiled fallback. Reviewed By: jbakker Differential Revision: https://developer.blender.org/D11764
-rw-r--r--source/blender/compositor/operations/COM_ColorBalanceASCCDLOperation.cc17
-rw-r--r--source/blender/compositor/operations/COM_ColorBalanceASCCDLOperation.h6
-rw-r--r--source/blender/compositor/operations/COM_ColorBalanceLGGOperation.cc17
-rw-r--r--source/blender/compositor/operations/COM_ColorBalanceLGGOperation.h6
4 files changed, 42 insertions, 4 deletions
diff --git a/source/blender/compositor/operations/COM_ColorBalanceASCCDLOperation.cc b/source/blender/compositor/operations/COM_ColorBalanceASCCDLOperation.cc
index d1d3752e402..b6f20a740f5 100644
--- a/source/blender/compositor/operations/COM_ColorBalanceASCCDLOperation.cc
+++ b/source/blender/compositor/operations/COM_ColorBalanceASCCDLOperation.cc
@@ -76,6 +76,23 @@ void ColorBalanceASCCDLOperation::executePixelSampled(float output[4],
output[3] = inputColor[3];
}
+void ColorBalanceASCCDLOperation::update_memory_buffer_row(PixelCursor &p)
+{
+ for (; p.out < p.row_end; p.next()) {
+ const float *in_factor = p.ins[0];
+ const float *in_color = p.ins[1];
+ const float fac = MIN2(1.0f, in_factor[0]);
+ const float fac_m = 1.0f - fac;
+ p.out[0] = fac_m * in_color[0] +
+ fac * colorbalance_cdl(in_color[0], m_offset[0], m_power[0], m_slope[0]);
+ p.out[1] = fac_m * in_color[1] +
+ fac * colorbalance_cdl(in_color[1], m_offset[1], m_power[1], m_slope[1]);
+ p.out[2] = fac_m * in_color[2] +
+ fac * colorbalance_cdl(in_color[2], m_offset[2], m_power[2], m_slope[2]);
+ p.out[3] = in_color[3];
+ }
+}
+
void ColorBalanceASCCDLOperation::deinitExecution()
{
this->m_inputValueOperation = nullptr;
diff --git a/source/blender/compositor/operations/COM_ColorBalanceASCCDLOperation.h b/source/blender/compositor/operations/COM_ColorBalanceASCCDLOperation.h
index 5851600190f..d161ea66af2 100644
--- a/source/blender/compositor/operations/COM_ColorBalanceASCCDLOperation.h
+++ b/source/blender/compositor/operations/COM_ColorBalanceASCCDLOperation.h
@@ -18,7 +18,7 @@
#pragma once
-#include "COM_NodeOperation.h"
+#include "COM_MultiThreadedRowOperation.h"
namespace blender::compositor {
@@ -26,7 +26,7 @@ namespace blender::compositor {
* this program converts an input color to an output value.
* it assumes we are in sRGB color space.
*/
-class ColorBalanceASCCDLOperation : public NodeOperation {
+class ColorBalanceASCCDLOperation : public MultiThreadedRowOperation {
protected:
/**
* Prefetched reference to the inputProgram
@@ -71,6 +71,8 @@ class ColorBalanceASCCDLOperation : public NodeOperation {
{
copy_v3_v3(this->m_slope, slope);
}
+
+ void update_memory_buffer_row(PixelCursor &p) override;
};
} // namespace blender::compositor
diff --git a/source/blender/compositor/operations/COM_ColorBalanceLGGOperation.cc b/source/blender/compositor/operations/COM_ColorBalanceLGGOperation.cc
index cac16a3f7b0..36307f0b136 100644
--- a/source/blender/compositor/operations/COM_ColorBalanceLGGOperation.cc
+++ b/source/blender/compositor/operations/COM_ColorBalanceLGGOperation.cc
@@ -81,6 +81,23 @@ void ColorBalanceLGGOperation::executePixelSampled(float output[4],
output[3] = inputColor[3];
}
+void ColorBalanceLGGOperation::update_memory_buffer_row(PixelCursor &p)
+{
+ for (; p.out < p.row_end; p.next()) {
+ const float *in_factor = p.ins[0];
+ const float *in_color = p.ins[1];
+ const float fac = MIN2(1.0f, in_factor[0]);
+ const float fac_m = 1.0f - fac;
+ p.out[0] = fac_m * in_color[0] +
+ fac * colorbalance_lgg(in_color[0], m_lift[0], m_gamma_inv[0], m_gain[0]);
+ p.out[1] = fac_m * in_color[1] +
+ fac * colorbalance_lgg(in_color[1], m_lift[1], m_gamma_inv[1], m_gain[1]);
+ p.out[2] = fac_m * in_color[2] +
+ fac * colorbalance_lgg(in_color[2], m_lift[2], m_gamma_inv[2], m_gain[2]);
+ p.out[3] = in_color[3];
+ }
+}
+
void ColorBalanceLGGOperation::deinitExecution()
{
this->m_inputValueOperation = nullptr;
diff --git a/source/blender/compositor/operations/COM_ColorBalanceLGGOperation.h b/source/blender/compositor/operations/COM_ColorBalanceLGGOperation.h
index 23f70247b66..4bc929ed76c 100644
--- a/source/blender/compositor/operations/COM_ColorBalanceLGGOperation.h
+++ b/source/blender/compositor/operations/COM_ColorBalanceLGGOperation.h
@@ -18,7 +18,7 @@
#pragma once
-#include "COM_NodeOperation.h"
+#include "COM_MultiThreadedRowOperation.h"
namespace blender::compositor {
@@ -26,7 +26,7 @@ namespace blender::compositor {
* this program converts an input color to an output value.
* it assumes we are in sRGB color space.
*/
-class ColorBalanceLGGOperation : public NodeOperation {
+class ColorBalanceLGGOperation : public MultiThreadedRowOperation {
protected:
/**
* Prefetched reference to the inputProgram
@@ -71,6 +71,8 @@ class ColorBalanceLGGOperation : public NodeOperation {
{
copy_v3_v3(this->m_gamma_inv, gamma_inv);
}
+
+ void update_memory_buffer_row(PixelCursor &p) override;
};
} // namespace blender::compositor