Blender V4.3
colortools.cc File Reference
#include <algorithm>
#include <cfloat>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include "MEM_guardedalloc.h"
#include "DNA_color_types.h"
#include "DNA_curve_types.h"
#include "BLI_blenlib.h"
#include "BLI_math_base.hh"
#include "BLI_math_vector.hh"
#include "BLI_task.h"
#include "BLI_threads.h"
#include "BLI_utildefines.h"
#include "BKE_colortools.hh"
#include "BKE_curve.hh"
#include "BKE_fcurve.hh"
#include "IMB_colormanagement.hh"
#include "IMB_imbuf_types.hh"
#include "BLO_read_write.hh"

Go to the source code of this file.

Classes

struct  ScopesUpdateData
 
struct  ScopesUpdateDataChunk
 

Macros

#define p2_h1   ((p2)-3)
 
#define p2_h2   ((p2) + 3)
 
#define INV_255   (1.0f / 255.0f)
 

Functions

void BKE_curvemapping_set_defaults (CurveMapping *cumap, int tot, float minx, float miny, float maxx, float maxy, short default_handle_type)
 
CurveMappingBKE_curvemapping_add (int tot, float minx, float miny, float maxx, float maxy)
 
void BKE_curvemapping_free_data (CurveMapping *cumap)
 
void BKE_curvemapping_free (CurveMapping *cumap)
 
void BKE_curvemapping_copy_data (CurveMapping *target, const CurveMapping *cumap)
 
CurveMappingBKE_curvemapping_copy (const CurveMapping *cumap)
 
void BKE_curvemapping_set_black_white_ex (const float black[3], const float white[3], float r_bwmul[3])
 
void BKE_curvemapping_set_black_white (CurveMapping *cumap, const float black[3], const float white[3])
 
bool BKE_curvemap_remove_point (CurveMap *cuma, CurveMapPoint *point)
 
void BKE_curvemap_remove (CurveMap *cuma, const short flag)
 
CurveMapPointBKE_curvemap_insert (CurveMap *cuma, float x, float y)
 
void BKE_curvemap_reset (CurveMap *cuma, const rctf *clipr, int preset, int slope)
 
void BKE_curvemap_handle_set (CurveMap *cuma, int type)
 
static void calchandle_curvemap (BezTriple *bezt, const BezTriple *prev, const BezTriple *next)
 
static float curvemap_calc_extend (const CurveMapping *cumap, const CurveMap *cuma, float x, const float first[2], const float last[2])
 
static void curve_eval_bezier_point (float start[3][3], float end[3][3], float *point)
 
static void curvemap_make_table (const CurveMapping *cumap, CurveMap *cuma)
 
void BKE_curvemapping_premultiply (CurveMapping *cumap, bool restore)
 
void BKE_curvemapping_changed (CurveMapping *cumap, const bool rem_doubles)
 
void BKE_curvemapping_changed_all (CurveMapping *cumap)
 
void BKE_curvemapping_reset_view (CurveMapping *cumap)
 
float BKE_curvemap_evaluateF (const CurveMapping *cumap, const CurveMap *cuma, float value)
 
float BKE_curvemapping_evaluateF (const CurveMapping *cumap, int cur, float value)
 
void BKE_curvemapping_evaluate3F (const CurveMapping *cumap, float vecout[3], const float vecin[3])
 
void BKE_curvemapping_evaluateRGBF (const CurveMapping *cumap, float vecout[3], const float vecin[3])
 
static blender::float3 evaluate_film_like (const CurveMapping *curve_mapping, blender::float3 input)
 
void BKE_curvemapping_evaluate_premulRGBF_ex (const CurveMapping *cumap, float vecout[3], const float vecin[3], const float black[3], const float bwmul[3])
 
void BKE_curvemapping_evaluate_premulRGBF (const CurveMapping *cumap, float vecout[3], const float vecin[3])
 
void BKE_curvemapping_evaluate_premulRGB (const CurveMapping *cumap, uchar vecout_byte[3], const uchar vecin_byte[3])
 
bool BKE_curvemapping_RGBA_does_something (const CurveMapping *cumap)
 
void BKE_curvemapping_get_range_minimums (const CurveMapping *curve_mapping, float minimums[CM_TOT])
 
void BKE_curvemapping_compute_range_dividers (const CurveMapping *curve_mapping, float dividers[CM_TOT])
 
void BKE_curvemapping_compute_slopes (const CurveMapping *curve_mapping, float start_slopes[CM_TOT], float end_slopes[CM_TOT])
 
bool BKE_curvemapping_is_map_identity (const CurveMapping *curve_mapping, int index)
 
void BKE_curvemapping_init (CurveMapping *cumap)
 
void BKE_curvemapping_table_F (const CurveMapping *cumap, float **array, int *size)
 
void BKE_curvemapping_table_RGBA (const CurveMapping *cumap, float **array, int *size)
 
void BKE_curvemapping_blend_write (BlendWriter *writer, const CurveMapping *cumap)
 
void BKE_curvemapping_curves_blend_write (BlendWriter *writer, const CurveMapping *cumap)
 
void BKE_curvemapping_blend_read (BlendDataReader *reader, CurveMapping *cumap)
 
BLI_INLINE int get_bin_float (float f)
 
static void save_sample_line (Scopes *scopes, const int idx, const float fx, const float rgb[3], const float ycc[3])
 
void BKE_histogram_update_sample_line (Histogram *hist, ImBuf *ibuf, const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings)
 
static void scopes_update_cb (void *__restrict userdata, const int y, const TaskParallelTLS *__restrict tls)
 
static void scopes_update_reduce (const void *__restrict, void *__restrict chunk_join, void *__restrict chunk)
 
void BKE_scopes_update (Scopes *scopes, ImBuf *ibuf, const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings)
 
void BKE_scopes_free (Scopes *scopes)
 
void BKE_scopes_new (Scopes *scopes)
 
void BKE_color_managed_display_settings_init (ColorManagedDisplaySettings *settings)
 
void BKE_color_managed_display_settings_copy (ColorManagedDisplaySettings *new_settings, const ColorManagedDisplaySettings *settings)
 
void BKE_color_managed_view_settings_init_render (ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings, const char *view_transform)
 
void BKE_color_managed_view_settings_init_default (ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings)
 
void BKE_color_managed_view_settings_copy (ColorManagedViewSettings *new_settings, const ColorManagedViewSettings *settings)
 
void BKE_color_managed_view_settings_free (ColorManagedViewSettings *settings)
 
void BKE_color_managed_view_settings_blend_write (BlendWriter *writer, ColorManagedViewSettings *settings)
 
void BKE_color_managed_view_settings_blend_read_data (BlendDataReader *reader, ColorManagedViewSettings *settings)
 
void BKE_color_managed_colorspace_settings_init (ColorManagedColorspaceSettings *colorspace_settings)
 
void BKE_color_managed_colorspace_settings_copy (ColorManagedColorspaceSettings *colorspace_settings, const ColorManagedColorspaceSettings *settings)
 
bool BKE_color_managed_colorspace_settings_equals (const ColorManagedColorspaceSettings *settings1, const ColorManagedColorspaceSettings *settings2)
 

Macro Definition Documentation

◆ INV_255

#define INV_255   (1.0f / 255.0f)

Definition at line 1417 of file colortools.cc.

Referenced by scopes_update_cb().

◆ p2_h1

#define p2_h1   ((p2)-3)

Referenced by calchandle_curvemap().

◆ p2_h2

#define p2_h2   ((p2) + 3)

Referenced by calchandle_curvemap().

Function Documentation

◆ BKE_color_managed_colorspace_settings_copy()

◆ BKE_color_managed_colorspace_settings_equals()

bool BKE_color_managed_colorspace_settings_equals ( const ColorManagedColorspaceSettings * settings1,
const ColorManagedColorspaceSettings * settings2 )

Definition at line 2007 of file colortools.cc.

References ColorManagedColorspaceSettings::name, and STREQ.

Referenced by image_save_post().

◆ BKE_color_managed_colorspace_settings_init()

void BKE_color_managed_colorspace_settings_init ( ColorManagedColorspaceSettings * colorspace_settings)

◆ BKE_color_managed_display_settings_copy()

◆ BKE_color_managed_display_settings_init()

void BKE_color_managed_display_settings_init ( ColorManagedDisplaySettings * settings)

◆ BKE_color_managed_view_settings_blend_read_data()

void BKE_color_managed_view_settings_blend_read_data ( BlendDataReader * reader,
ColorManagedViewSettings * settings )

◆ BKE_color_managed_view_settings_blend_write()

void BKE_color_managed_view_settings_blend_write ( BlendWriter * writer,
ColorManagedViewSettings * settings )

Definition at line 1976 of file colortools.cc.

References BKE_curvemapping_blend_write().

Referenced by BKE_image_format_blend_write(), and scene_blend_write().

◆ BKE_color_managed_view_settings_copy()

◆ BKE_color_managed_view_settings_free()

◆ BKE_color_managed_view_settings_init_default()

void BKE_color_managed_view_settings_init_default ( ColorManagedViewSettings * view_settings,
const ColorManagedDisplaySettings * display_settings )

Initialize view settings which are best suitable for viewing non-render images. For example,s movie clips while tracking.

Definition at line 1942 of file colortools.cc.

References IMB_colormanagement_init_default_view_settings().

Referenced by BKE_image_format_init().

◆ BKE_color_managed_view_settings_init_render()

◆ BKE_curvemap_evaluateF()

◆ BKE_curvemap_handle_set()

void BKE_curvemap_handle_set ( CurveMap * cuma,
int type )

◆ BKE_curvemap_insert()

◆ BKE_curvemap_remove()

void BKE_curvemap_remove ( CurveMap * cuma,
short flag )

Removes with flag set.

Definition at line 219 of file colortools.cc.

References b, CurveMap::curve, CurveMapPoint::flag, flag, MEM_freeN(), MEM_mallocN, and CurveMap::totpoint.

Referenced by BKE_curvemapping_changed(), and curvemap_buttons_layout().

◆ BKE_curvemap_remove_point()

bool BKE_curvemap_remove_point ( CurveMap * cuma,
CurveMapPoint * point )

Remove specified point.

Definition at line 189 of file colortools.cc.

References b, CurveMap::curve, MEM_freeN(), MEM_mallocN, and CurveMap::totpoint.

◆ BKE_curvemap_reset()

◆ BKE_curvemapping_add()

CurveMapping * BKE_curvemapping_add ( int tot,
float minx,
float miny,
float maxx,
float maxy )

◆ BKE_curvemapping_blend_read()

◆ BKE_curvemapping_blend_write()

◆ BKE_curvemapping_changed()

◆ BKE_curvemapping_changed_all()

void BKE_curvemapping_changed_all ( CurveMapping * cumap)

◆ BKE_curvemapping_compute_range_dividers()

void BKE_curvemapping_compute_range_dividers ( const CurveMapping * curve_mapping,
float dividers[CM_TOT] )

◆ BKE_curvemapping_compute_slopes()

void BKE_curvemapping_compute_slopes ( const CurveMapping * curve_mapping,
float start_slopes[CM_TOT],
float end_slopes[CM_TOT] )

◆ BKE_curvemapping_copy()

◆ BKE_curvemapping_copy_data()

◆ BKE_curvemapping_curves_blend_write()

void BKE_curvemapping_curves_blend_write ( BlendWriter * writer,
const CurveMapping * cumap )

◆ BKE_curvemapping_evaluate3F()

void BKE_curvemapping_evaluate3F ( const CurveMapping * cumap,
float vecout[3],
const float vecin[3] )

◆ BKE_curvemapping_evaluate_premulRGB()

void BKE_curvemapping_evaluate_premulRGB ( const CurveMapping * cumap,
unsigned char vecout_byte[3],
const unsigned char vecin_byte[3] )

◆ BKE_curvemapping_evaluate_premulRGBF()

◆ BKE_curvemapping_evaluate_premulRGBF_ex()

void BKE_curvemapping_evaluate_premulRGBF_ex ( const CurveMapping * cumap,
float vecout[3],
const float vecin[3],
const float black[3],
const float bwmul[3] )

Same as BKE_curvemapping_evaluate_premulRGBF but black/bwmul are passed as args for the compositor where they can change per pixel.

Use in conjunction with BKE_curvemapping_set_black_white_ex

Parameters
blackUse instead of cumap->black
bwmulUse instead of cumap->bwmul

Definition at line 1169 of file colortools.cc.

References b, BKE_curvemap_evaluateF(), CurveMapping::cm, copy_v3_v3(), CURVE_TONE_FILMLIKE, CURVE_TONE_STANDARD, evaluate_film_like(), and CurveMapping::tone.

Referenced by BKE_curvemapping_evaluate_premulRGBF(), and blender::compositor::ColorCurveOperation::update_memory_buffer_partial().

◆ BKE_curvemapping_evaluateF()

float BKE_curvemapping_evaluateF ( const CurveMapping * cumap,
int cur,
float value )

Single curve, with table check. Works with curve 'cur'.

Definition at line 1073 of file colortools.cc.

References BKE_curvemap_evaluateF(), CurveMapping::clipr, CurveMapping::cm, CUMA_DO_CLIP, CurveMapping::flag, rctf::ymax, and rctf::ymin.

Referenced by blender::ed::sculpt_paint::greasepencil::PaintOperationExecutor::active_jitter(), BKE_brush_calc_curve_factors(), BKE_brush_curve_strength(), BKE_curvemapping_integrate_clamped(), BKE_gpencil_multiframe_falloff_calc(), blender::ed::sculpt_paint::greasepencil::brush_radius(), blender::nodes::node_shader_curves_cc::flt::CurveFloatFunction::call(), blender::eevee::Sampling::cdf_from_curvemapping(), blender::ed::sculpt_paint::CombOperationExecutor::comb_projected(), blender::ed::sculpt_paint::CombOperationExecutor::comb_spherical(), blender::compositor::TimeNode::convert_to_operations(), blender::deform_drawing(), blender::deform_drawing(), density_falloff(), do_clump_level(), do_rough_curve(), blender::ed::sculpt_paint::greasepencil::EraseOperationExecutor::execute(), blender::nodes::node_composite_time_curves_cc::TimeCurveOperation::execute(), Freestyle_evaluateCurveMappingF(), blender::ed::greasepencil::get_multi_frame_falloff(), blender::ed::sculpt_paint::greasepencil::grease_pencil_interpolate_sequence_easing_calc(), blender::ed::greasepencil::grease_pencil_primitive_update_curves(), blender::hook_falloff(), hook_falloff(), hue_correct_apply_threaded(), blender::modify_stroke_color(), blender::modify_stroke_color(), blender::ed::greasepencil::opacity_from_input_sample(), blender::ed::sculpt_paint::auto_mask::process_cavity_factor(), project_paint_uvpixel_mask(), blender::ed::greasepencil::radius_from_input_sample(), blender::ed::sculpt_paint::greasepencil::PaintOperationExecutor::randomize_color(), blender::ed::sculpt_paint::greasepencil::PaintOperationExecutor::randomize_opacity(), blender::ed::sculpt_paint::greasepencil::PaintOperationExecutor::randomize_radius(), blender::ed::sculpt_paint::greasepencil::PaintOperationExecutor::randomize_rotation(), time_colorfn(), blender::compositor::HueSaturationValueCorrectOperation::update_memory_buffer_partial(), warpModifier_do(), and weightvg_do_map().

◆ BKE_curvemapping_evaluateRGBF()

void BKE_curvemapping_evaluateRGBF ( const CurveMapping * cumap,
float vecout[3],
const float vecin[3] )

RGB case, no black/white points, no pre-multiply.

Definition at line 1098 of file colortools.cc.

References BKE_curvemap_evaluateF(), and CurveMapping::cm.

Referenced by blender::nodes::node_shader_curves_cc::rgb::CurveRGBFunction::call(), and rgb_colorfn().

◆ BKE_curvemapping_free()

◆ BKE_curvemapping_free_data()

◆ BKE_curvemapping_get_range_minimums()

void BKE_curvemapping_get_range_minimums ( const CurveMapping * curve_mapping,
float minimums[CM_TOT] )

Definition at line 1264 of file colortools.cc.

References CurveMapping::cm, CM_TOT, and CurveMap::mintable.

◆ BKE_curvemapping_init()

void BKE_curvemapping_init ( CurveMapping * cumap)

Call before all evaluation functions.

Definition at line 1338 of file colortools.cc.

References CurveMapping::cm, CM_TOT, curvemap_make_table(), and CurveMap::table.

Referenced by BKE_brush_gen_radial_control_imbuf(), BKE_gpencil_modifier_blend_read_data(), BKE_particlesettings_clump_curve_init(), BKE_particlesettings_rough_curve_init(), BKE_particlesettings_twist_curve_init(), BKE_sculpt_default_cavity_curve(), BKE_toolsettings_copy(), blo_do_versions_270(), blo_do_versions_280(), blo_do_versions_290(), blo_update_defaults_scene(), blender::ed::sculpt_paint::auto_mask::cache_init(), blender::ed::sculpt_paint::expand::cache_initial_config_set(), blender::ed::sculpt_paint::pose::calc_twist_deform(), blender::ed::sculpt_paint::CombOperationExecutor::comb_projected(), blender::ed::sculpt_paint::CombOperationExecutor::comb_spherical(), blender::nodes::node_composite_huecorrect_cc::HueCorrectShaderNode::compile(), blender::nodes::node_composite_rgb_curves_cc::RGBCurvesShaderNode::compile(), blender::nodes::node_composite_vector_curves_cc::VectorCurvesShaderNode::compile(), blender::compositor::TimeNode::convert_to_operations(), createTransGPencil(), curve_mapping_to_ocio_settings(), curves_apply(), deformVerts_do(), density_falloff(), blender::ed::sculpt_paint::color::do_paint_brush(), blender::nodes::node_composite_time_curves_cc::TimeCurveOperation::execute(), Freestyle_evaluateCurveMappingF(), blender::ed::sculpt_paint::greasepencil::WeightPaintOperation::get_brush_settings(), blender::nodes::node_shader_curves_cc::flt::gpu_shader_curve_float(), blender::nodes::node_shader_curves_cc::rgb::gpu_shader_curve_rgb(), blender::nodes::node_shader_curves_cc::vec::gpu_shader_curve_vec(), blender::ed::sculpt_paint::grease_pencil_fill_init(), blender::ed::sculpt_paint::greasepencil::grease_pencil_interpolate_sequence_exec(), blender::ed::greasepencil::grease_pencil_primitive_invoke(), hue_correct_apply(), blender::ed::sculpt_paint::greasepencil::init_brush(), init_data(), init_data(), blender::compositor::CurveBaseOperation::init_execution(), blender::ed::sculpt_paint::boundary::init_falloff_bmesh(), blender::ed::sculpt_paint::boundary::init_falloff_grids(), blender::ed::sculpt_paint::boundary::init_falloff_mesh(), blender::modifier::greasepencil::init_influence_data(), blender::ed::sculpt_paint::load_tex_cursor(), node_initexec_curves(), blender::ed::sculpt_paint::greasepencil::EraseOperation::on_stroke_begin(), blender::ed::sculpt_paint::greasepencil::PaintOperation::on_stroke_begin(), blender::ed::sculpt_paint::greasepencil::TintOperation::on_stroke_begin(), blender::ed::sculpt_paint::paint_stroke_new(), paint_weight_gradient_exec(), psys_sim_data_init(), radial_control_paint_curve(), blender::modifier::greasepencil::read_influence_data(), blender::ed::greasepencil::retrieve_editable_drawings_from_layer_with_falloff(), blender::ed::greasepencil::retrieve_editable_drawings_grouped_per_frame(), blender::ed::greasepencil::retrieve_editable_drawings_with_falloff(), scene_blend_read_data(), scene_init_data(), blender::ed::sculpt_paint::pose::sculpt_pose_do_translate_deform(), SEQ_sound_equalizermodifier_recreator(), blender::nodes::node_shader_curves_cc::flt::sh_node_curve_float_build_multi_function(), blender::nodes::node_shader_curves_cc::rgb::sh_node_curve_rgb_build_multi_function(), blender::nodes::node_shader_curves_cc::vec::sh_node_curve_vec_build_multi_function(), blender::ed::sculpt_paint::smooth_brush_toggle_on(), blender::ed::sculpt_paint::vwpaint::smooth_brush_toggle_on(), time_colorfn(), uv_sculpt_stroke_init(), warpModifier_do(), and weightvg_do_map().

◆ BKE_curvemapping_is_map_identity()

bool BKE_curvemapping_is_map_identity ( const CurveMapping * curve_mapping,
int index )

Check if the curve map at the index is identity, that is, does nothing. A curve map is said to be identity if:

  • The curve mapping uses extrapolation.
  • Its range is 1.
  • The slope at its start point is 1.
  • The slope at its end point is 1.
  • The number of points is 2.
  • The start point is at (0, 0).
  • The end point is at (1, 1). Note that this could return false even if the curve map is identity, this happens in the case when more than 2 points exist in the curve map but all points are collinear.

Definition at line 1311 of file colortools.cc.

References CurveMapping::cm, CUMA_EXTEND_EXTRAPOLATE, CurveMap::curve, CurveMap::ext_in, CurveMap::ext_out, CurveMapping::flag, CurveMap::maxtable, CurveMap::mintable, CurveMap::totpoint, CurveMapPoint::x, and CurveMapPoint::y.

Referenced by blender::nodes::node_composite_rgb_curves_cc::RGBCurvesShaderNode::compile(), and blender::nodes::node_shader_curves_cc::rgb::gpu_shader_curve_rgb().

◆ BKE_curvemapping_premultiply()

◆ BKE_curvemapping_reset_view()

void BKE_curvemapping_reset_view ( CurveMapping * cumap)

Reset the view for current curve.

Definition at line 1046 of file colortools.cc.

References CurveMapping::clipr, and CurveMapping::curr.

Referenced by curvemap_tools_func().

◆ BKE_curvemapping_RGBA_does_something()

bool BKE_curvemapping_RGBA_does_something ( const CurveMapping * cumap)

◆ BKE_curvemapping_set_black_white()

◆ BKE_curvemapping_set_black_white_ex()

void BKE_curvemapping_set_black_white_ex ( const float black[3],
const float white[3],
float r_bwmul[3] )

◆ BKE_curvemapping_set_defaults()

◆ BKE_curvemapping_table_F()

void BKE_curvemapping_table_F ( const CurveMapping * cumap,
float ** array,
int * size )

◆ BKE_curvemapping_table_RGBA()

◆ BKE_histogram_update_sample_line()

◆ BKE_scopes_free()

void BKE_scopes_free ( Scopes * scopes)

◆ BKE_scopes_new()

◆ BKE_scopes_update()

void BKE_scopes_update ( Scopes * scopes,
ImBuf * ibuf,
const ColorManagedViewSettings * view_settings,
const ColorManagedDisplaySettings * display_settings )

◆ calchandle_curvemap()

static void calchandle_curvemap ( BezTriple * bezt,
const BezTriple * prev,
const BezTriple * next )
static

◆ curve_eval_bezier_point()

static void curve_eval_bezier_point ( float start[3][3],
float end[3][3],
float * point )
static

◆ curvemap_calc_extend()

static float curvemap_calc_extend ( const CurveMapping * cumap,
const CurveMap * cuma,
float x,
const float first[2],
const float last[2] )
static

◆ curvemap_make_table()

◆ evaluate_film_like()

◆ get_bin_float()

BLI_INLINE int get_bin_float ( float f)

Definition at line 1419 of file colortools.cc.

References CLAMP, and int.

Referenced by scopes_update_cb().

◆ save_sample_line()

◆ scopes_update_cb()

◆ scopes_update_reduce()

static void scopes_update_reduce ( const void * __restrict,
void *__restrict chunk_join,
void *__restrict chunk )
static