Blender V4.3
COM_HueSaturationValueCorrectOperation.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
6
7#include "BLI_math_vector.h"
8
9#include "BKE_colortools.hh"
10
11namespace blender::compositor {
12
18
20 const rcti &area,
22{
23 float hsv[4];
24 for (BuffersIterator<float> it = output->iterate_with(inputs, area); !it.is_end(); ++it) {
25 copy_v4_v4(hsv, it.in(0));
26
27 /* We parameterize the curve using the hue value. */
28 const float parameter = hsv[0];
29
30 /* Adjust hue, scaling returned default 0.5 up to 1. */
31 float f = BKE_curvemapping_evaluateF(curve_mapping_, 0, parameter);
32 hsv[0] += f - 0.5f;
33
34 /* Adjust saturation, scaling returned default 0.5 up to 1. */
36 hsv[1] *= (f * 2.0f);
37
38 /* Adjust value, scaling returned default 0.5 up to 1. */
40 hsv[2] *= (f * 2.0f);
41
42 hsv[0] = hsv[0] - floorf(hsv[0]); /* Mod 1.0. */
43 CLAMP(hsv[1], 0.0f, 1.0f);
44
45 copy_v4_v4(it.out, hsv);
46 }
47}
48
49} // namespace blender::compositor
float BKE_curvemapping_evaluateF(const CurveMapping *cumap, int cur, float value)
MINLINE void copy_v4_v4(float r[4], const float a[4])
#define CLAMP(a, b, c)
void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) override
a MemoryBuffer contains access to the data
void add_output_socket(DataType datatype)
void add_input_socket(DataType datatype, ResizeMode resize_mode=ResizeMode::Center)
#define floorf(x)
typename BuffersIteratorBuilder< T >::Iterator BuffersIterator