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
This commit is contained in:
parent
0c90aa097d
commit
3d9ecf1cf2
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue