Blender V5.0
colormanagement.cc File Reference
#include "IMB_colormanagement.hh"
#include "IMB_colormanagement_intern.hh"
#include <cmath>
#include <cstring>
#include "DNA_ID.h"
#include "DNA_color_types.h"
#include "DNA_image_types.h"
#include "DNA_movieclip_types.h"
#include "DNA_node_types.h"
#include "DNA_scene_types.h"
#include "DNA_sequence_types.h"
#include "DNA_space_types.h"
#include "IMB_filetype.hh"
#include "IMB_filter.hh"
#include "IMB_imbuf.hh"
#include "IMB_imbuf_types.hh"
#include "IMB_metadata.hh"
#include "IMB_moviecache.hh"
#include "MEM_guardedalloc.h"
#include "BLI_color.hh"
#include "BLI_colorspace.hh"
#include "BLI_fileops.hh"
#include "BLI_listbase.h"
#include "BLI_math_color.h"
#include "BLI_math_color.hh"
#include "BLI_math_matrix.hh"
#include "BLI_math_matrix_types.hh"
#include "BLI_math_vector_types.hh"
#include "BLI_path_utils.hh"
#include "BLI_rect.h"
#include "BLI_string_ref.hh"
#include "BLI_string_utf8.h"
#include "BLI_task.hh"
#include "BLI_threads.h"
#include "BLI_vector_set.hh"
#include "BKE_appdir.hh"
#include "BKE_colortools.hh"
#include "BKE_context.hh"
#include "BKE_global.hh"
#include "BKE_idtype.hh"
#include "BKE_image_format.hh"
#include "BKE_library.hh"
#include "BKE_main.hh"
#include "BKE_node.hh"
#include "BKE_node_legacy_types.hh"
#include "GPU_capabilities.hh"
#include "RNA_define.hh"
#include "SEQ_iterator.hh"
#include "DEG_depsgraph.hh"
#include "CLG_log.h"
#include "OCIO_api.hh"

Go to the source code of this file.

Classes

struct  ColormanageProcessor
struct  GlobalGPUState
struct  GlobalColorPickingState
struct  ColormanageCacheViewSettings
struct  ColormanageCacheDisplaySettings
struct  ColormanageCacheKey
struct  ColormanageCacheData
struct  ColormanageCache
struct  DisplayBufferThread
struct  DisplayBufferInitData
struct  ProcessorTransformThread
struct  ProcessorTransformInitData

Typedefs

using float3
using float3x3

Functions

Color Managed Cache
static MovieCachecolormanage_moviecache_get (const ImBuf *ibuf)
static ColormanageCacheDatacolormanage_cachedata_get (const ImBuf *ibuf)
static uint colormanage_hashhash (const void *key_v)
static bool colormanage_hashcmp (const void *av, const void *bv)
static MovieCachecolormanage_moviecache_ensure (ImBuf *ibuf)
static void colormanage_cachedata_set (ImBuf *ibuf, ColormanageCacheData *data)
static void colormanage_view_settings_to_cache (ImBuf *ibuf, ColormanageCacheViewSettings *cache_view_settings, const ColorManagedViewSettings *view_settings)
static void colormanage_display_settings_to_cache (ColormanageCacheDisplaySettings *cache_display_settings, const ColorManagedDisplaySettings *display_settings)
static void colormanage_settings_to_key (ColormanageCacheKey *key, const ColormanageCacheViewSettings *view_settings, const ColormanageCacheDisplaySettings *display_settings)
static ImBufcolormanage_cache_get_ibuf (ImBuf *ibuf, ColormanageCacheKey *key, void **cache_handle)
static ucharcolormanage_cache_get (ImBuf *ibuf, const ColormanageCacheViewSettings *view_settings, const ColormanageCacheDisplaySettings *display_settings, void **cache_handle)
static void colormanage_cache_put (ImBuf *ibuf, const ColormanageCacheViewSettings *view_settings, const ColormanageCacheDisplaySettings *display_settings, uchar *display_buffer, void **cache_handle)
static void colormanage_cache_handle_release (void *cache_handle)
Initialization / De-initialization
static bool colormanage_role_color_space_name_get (ocio::Config &config, char *colorspace_name, const char *role, const char *backup_role, const bool optional=false)
static void colormanage_update_matrices ()
static bool colormanage_load_config (ocio::Config &config)
static void colormanage_free_config ()
void colormanagement_init ()
void colormanagement_exit ()
Internal functions
static StringRef view_filter_for_look (StringRefNull view_name)
static bool colormanage_compatible_look (const ocio::Look *look, StringRef view_filter)
static bool colormanage_compatible_look (const ocio::Look *look, const char *view_name)
static bool colormanage_use_look (const char *look_name, const char *view_name)
void colormanage_cache_free (ImBuf *ibuf)
void IMB_colormanagement_display_settings_from_ctx (const bContext *C, ColorManagedViewSettings **r_view_settings, ColorManagedDisplaySettings **r_display_settings)
static bool get_display_emulation (const ColorManagedDisplaySettings &display_settings)
static std::shared_ptr< const ocio::CPUProcessorget_display_buffer_processor (const ColorManagedDisplaySettings &display_settings, const char *look, const char *view_transform, const float exposure, const float gamma, const float temperature, const float tint, const bool use_white_balance, const char *from_colorspace, const ColorManagedDisplaySpace target, const bool inverse=false)
void IMB_colormanagement_init_untonemapped_view_settings (ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *)
static void curve_mapping_apply_pixel (const CurveMapping *curve_mapping, float *pixel, int channels)
void colormanage_imbuf_set_default_spaces (ImBuf *ibuf)
void colormanage_imbuf_make_linear (ImBuf *ibuf, const char *from_colorspace, const ColorManagedFileOutput output)
Functions for converting between color temperature/tint and RGB white points
void IMB_colormanagement_get_whitepoint (const float temperature, const float tint, float whitepoint[3])
bool IMB_colormanagement_set_whitepoint (const float whitepoint[3], float &temperature, float &tint)
Display Buffer Transform Routines
static void display_buffer_init_handle (DisplayBufferThread *handle, int start_line, int tot_line, DisplayBufferInitData *init_data)
static void display_buffer_apply_get_linear_buffer (DisplayBufferThread *handle, int height, float *linear_buffer, bool *is_straight_alpha)
static void do_display_buffer_apply_no_processor (DisplayBufferThread *handle)
static void do_display_buffer_apply_thread (DisplayBufferThread *handle)
static void display_buffer_apply_threaded (ImBuf *ibuf, const float *buffer, uchar *byte_buffer, float *display_buffer, uchar *display_buffer_byte, ColormanageProcessor *cm_processor)
static bool is_colorspace_same_as_display (const ColorSpace *colorspace, const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings)
bool IMB_colormanagement_display_processor_needed (const ImBuf *ibuf, const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings)
ColormanageProcessorIMB_colormanagement_display_processor_for_imbuf (const ImBuf *ibuf, const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings, const ColorManagedDisplaySpace display_space)
static void colormanage_display_buffer_process_ex (ImBuf *ibuf, float *display_buffer, uchar *display_buffer_byte, const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings, const ColorManagedDisplaySpace display_space)
static void colormanage_display_buffer_process (ImBuf *ibuf, uchar *display_buffer, const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings, const ColorManagedDisplaySpace display_space)
Threaded Processor Transform Routines
static void processor_transform_init_handle (ProcessorTransformThread *handle, int start_line, int tot_line, ProcessorTransformInitData *init_data)
static void do_processor_transform_thread (ProcessorTransformThread *handle)
static void processor_transform_apply_threaded (uchar *byte_buffer, float *float_buffer, const int width, const int height, const int channels, ColormanageProcessor *cm_processor, const bool predivide, const bool float_from_byte)
Color Space Transformation Functions
static void colormanagement_transform_ex (uchar *byte_buffer, float *float_buffer, int width, int height, int channels, const char *from_colorspace, const char *to_colorspace, bool predivide)
void IMB_colormanagement_transform_float (float *buffer, int width, int height, int channels, const char *from_colorspace, const char *to_colorspace, bool predivide)
void IMB_colormanagement_transform_byte (uchar *buffer, int width, int height, int channels, const char *from_colorspace, const char *to_colorspace)
void IMB_colormanagement_transform_byte_to_float (float *float_buffer, uchar *byte_buffer, int width, int height, int channels, const char *from_colorspace, const char *to_colorspace)
void IMB_colormanagement_transform_v4 (float pixel[4], const char *from_colorspace, const char *to_colorspace)
void IMB_colormanagement_colorspace_to_scene_linear_v3 (float pixel[3], const ColorSpace *colorspace)
void IMB_colormanagement_scene_linear_to_colorspace_v3 (float pixel[3], const ColorSpace *colorspace)
void IMB_colormanagement_colorspace_to_scene_linear_v4 (float pixel[4], const bool predivide, const ColorSpace *colorspace)
void IMB_colormanagement_colorspace_to_scene_linear (float *buffer, const int width, const int height, const int channels, const ColorSpace *colorspace, const bool predivide)
void IMB_colormanagement_scene_linear_to_colorspace (float *buffer, const int width, const int height, const int channels, const ColorSpace *colorspace)
void IMB_colormanagement_imbuf_to_byte_texture (uchar *out_buffer, const int offset_x, const int offset_y, const int width, const int height, const ImBuf *ibuf, const bool store_premultiplied)
void IMB_colormanagement_imbuf_to_float_texture (float *out_buffer, const int offset_x, const int offset_y, const int width, const int height, const ImBuf *ibuf, const bool store_premultiplied)
void IMB_colormanagement_scene_linear_to_color_picking_v3 (float color_picking[3], const float scene_linear[3])
void IMB_colormanagement_color_picking_to_scene_linear_v3 (float scene_linear[3], const float color_picking[3])
void IMB_colormanagement_scene_linear_to_display_v3 (float pixel[3], const ColorManagedDisplay *display, const ColorManagedDisplaySpace display_space)
void IMB_colormanagement_display_to_scene_linear_v3 (float pixel[3], const ColorManagedDisplay *display, const ColorManagedDisplaySpace display_space)
void IMB_colormanagement_pixel_to_display_space_v4 (float result[4], const float pixel[4], const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings, const ColorManagedDisplaySpace display_space)
static void colormanagement_imbuf_make_display_space (ImBuf *ibuf, const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings, const ColorManagedDisplaySpace display_space, bool make_byte)
void IMB_colormanagement_imbuf_make_display_space (ImBuf *ibuf, const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings, const ColorManagedDisplaySpace display_space)
static ImBufimbuf_ensure_editable (ImBuf *ibuf, ImBuf *colormanaged_ibuf, bool allocate_result)
ImBufIMB_colormanagement_imbuf_for_write (ImBuf *ibuf, bool save_as_render, bool allocate_result, const ImageFormatData *image_format)
Public Display Buffers Interfaces
ucharIMB_display_buffer_acquire (ImBuf *ibuf, const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings, void **cache_handle)
ucharIMB_display_buffer_acquire_ctx (const bContext *C, ImBuf *ibuf, void **cache_handle)
void IMB_display_buffer_transform_apply (uchar *display_buffer, float *linear_buffer, int width, int height, int channels, const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings, bool predivide)
void IMB_display_buffer_release (void *cache_handle)
Display Functions
int IMB_colormanagement_display_get_named_index (const char *name)
const char * IMB_colormanagement_display_get_indexed_name (const int index)
const char * IMB_colormanagement_display_get_default_name ()
const ColorManagedDisplayIMB_colormanagement_display_get_named (const char *name)
const char * IMB_colormanagement_display_get_none_name ()
const char * IMB_colormanagement_display_get_default_view_transform_name (const ColorManagedDisplay *display)
const ColorSpaceIMB_colormangement_display_get_color_space (const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings)
bool IMB_colormanagement_display_is_hdr (const ColorManagedDisplaySettings *display_settings, const char *view_name)
bool IMB_colormanagement_display_is_wide_gamut (const ColorManagedDisplaySettings *display_settings, const char *view_name)
bool IMB_colormanagement_display_support_emulation (const ColorManagedDisplaySettings *display_settings, const char *view_name)
View Functions
int IMB_colormanagement_view_get_id_by_name (const char *name)
const char * IMB_colormanagement_view_get_name_by_id (const int index)
const char * IMB_colormanagement_view_get_default_name (const char *display_name)
const char * IMB_colormanagement_view_get_raw_or_default_name (const char *display_name)
Color Space Functions
const ColorSpacecolormanage_colorspace_get_named (const char *name)
const ColorSpacecolormanage_colorspace_get_roled (const int role)
int IMB_colormanagement_colorspace_get_named_index (const char *name)
const char * IMB_colormanagement_colorspace_get_indexed_name (const int index)
const char * IMB_colormanagement_colorspace_get_name (const ColorSpace *colorspace)
void IMB_colormanagement_colorspace_from_ibuf_ftype (ColorManagedColorspaceSettings *colorspace_settings, ImBuf *ibuf)
Looks Functions
int IMB_colormanagement_look_get_named_index (const char *name)
const char * IMB_colormanagement_look_get_indexed_name (const int index)
const char * IMB_colormanagement_look_get_default_name ()
const char * IMB_colormanagement_look_validate_for_view (const char *view_name, const char *look_name)
RNA Helper Functions
void IMB_colormanagement_display_items_add (EnumPropertyItem **items, int *totitem)
void IMB_colormanagement_view_items_add (EnumPropertyItem **items, int *totitem, const char *display_name)
void IMB_colormanagement_look_items_add (EnumPropertyItem **items, int *totitem, const char *view_name)
void IMB_colormanagement_colorspace_items_add (EnumPropertyItem **items, int *totitem)
Partial Display Buffer Update
static void partial_buffer_update_rect (ImBuf *ibuf, uchar *display_buffer, const float *linear_buffer, const uchar *byte_buffer, int display_stride, int linear_stride, int linear_offset_x, int linear_offset_y, ColormanageProcessor *cm_processor, const int xmin, const int ymin, const int xmax, const int ymax)
static void imb_partial_display_buffer_update_ex (ImBuf *ibuf, const float *linear_buffer, const uchar *byte_buffer, int stride, int offset_x, int offset_y, const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings, int xmin, int ymin, int xmax, int ymax, bool do_threads)
void IMB_partial_display_buffer_update (ImBuf *ibuf, const float *linear_buffer, const uchar *byte_buffer, int stride, int offset_x, int offset_y, const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings, int xmin, int ymin, int xmax, int ymax)
void IMB_partial_display_buffer_update_threaded (ImBuf *ibuf, const float *linear_buffer, const uchar *byte_buffer, int stride, int offset_x, int offset_y, const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings, int xmin, int ymin, int xmax, int ymax)
void IMB_partial_display_buffer_update_delayed (ImBuf *ibuf, int xmin, int ymin, int xmax, int ymax)
Pixel Processor Functions
ColormanageProcessorIMB_colormanagement_display_processor_new (const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings, const ColorManagedDisplaySpace display_space, const bool inverse)
ColormanageProcessorIMB_colormanagement_colorspace_processor_new (const char *from_colorspace, const char *to_colorspace)
bool IMB_colormanagement_processor_is_noop (ColormanageProcessor *cm_processor)
void IMB_colormanagement_processor_apply_v4 (ColormanageProcessor *cm_processor, float pixel[4])
void IMB_colormanagement_processor_apply_v4_predivide (ColormanageProcessor *cm_processor, float pixel[4])
void IMB_colormanagement_processor_apply_v3 (ColormanageProcessor *cm_processor, float pixel[3])
void IMB_colormanagement_processor_apply_pixel (ColormanageProcessor *cm_processor, float *pixel, int channels)
void IMB_colormanagement_processor_apply (ColormanageProcessor *cm_processor, float *buffer, int width, int height, int channels, bool predivide)
void IMB_colormanagement_processor_apply_byte (ColormanageProcessor *cm_processor, uchar *buffer, int width, int height, int channels)
void IMB_colormanagement_processor_free (ColormanageProcessor *cm_processor)
static CurveMappingupdate_glsl_curve_mapping (const ColorManagedViewSettings *view_settings)
bool IMB_colormanagement_setup_glsl_draw_from_space (const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings, const ColorSpace *from_colorspace, float dither, bool predivide, bool do_overlay_merge)
bool IMB_colormanagement_setup_glsl_draw (const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings, float dither, bool predivide)
bool IMB_colormanagement_setup_glsl_draw_from_space_ctx (const bContext *C, const ColorSpace *from_colorspace, float dither, bool predivide)
bool IMB_colormanagement_setup_glsl_draw_ctx (const bContext *C, float dither, bool predivide)
bool IMB_colormanagement_setup_glsl_draw_to_scene_linear (const char *from_colorspace_name, const bool predivide)
void IMB_colormanagement_finish_glsl_draw ()

Variables

static CLG_LogRef LOG = {"color_management"}

Global declarations

#define DISPLAY_BUFFER_CHANNELS   4
static std::unique_ptr< ocio::Configg_config = nullptr
static bool g_config_is_custom = false
static blender::VectorSet< blender::StringRefNullg_all_view_names
static char global_role_data [MAX_COLORSPACE_NAME]
static char global_role_scene_linear [MAX_COLORSPACE_NAME]
static char global_role_color_picking [MAX_COLORSPACE_NAME]
static char global_role_texture_painting [MAX_COLORSPACE_NAME]
static char global_role_default_byte [MAX_COLORSPACE_NAME]
static char global_role_default_float [MAX_COLORSPACE_NAME]
static char global_role_default_sequencer [MAX_COLORSPACE_NAME]
static char global_role_aces_interchange [MAX_COLORSPACE_NAME]
static char global_role_scene_linear_default [MAX_COLORSPACE_NAME]
static char global_role_default_float_default [MAX_COLORSPACE_NAME]
float3x3 global_scene_linear_to_xyz_default = float3x3::zero()
static pthread_mutex_t processor_lock = BLI_MUTEX_INITIALIZER
static struct GlobalGPUState global_gpu_state
static struct GlobalColorPickingState global_color_picking_state

Generic Functions

static const int CICP_PRI_REC709 = 1
static const int CICP_PRI_REC2020 = 9
static const int CICP_PRI_P3D65 = 12
static const int CICP_TRC_BT709 = 1
static const int CICP_TRC_G22 = 4
static const int CICP_TRC_SRGB = 13
static const int CICP_TRC_PQ = 16
static const int CICP_TRC_G26 = 17
static const int CICP_TRC_HLG = 18
static const int CICP_MATRIX_RGB = 0
static const int CICP_MATRIX_BT709 = 1
static const int CICP_MATRIX_REC2020_NCL = 9
static const int CICP_RANGE_FULL = 1
static bool colormanage_check_display_settings (ColorManagedDisplaySettings *display_settings, const char *what, const ocio::Display *default_display)
static StringRefNull colormanage_find_matching_view_name (const ocio::Display *display, StringRefNull view_name)
static bool colormanage_check_view_settings (ColorManagedDisplaySettings *display_settings, ColorManagedViewSettings *view_settings, const char *what)
static bool colormanage_check_colorspace_name (char *name, const char *what)
static bool colormanage_check_colorspace_settings (ColorManagedColorspaceSettings *settings, const char *what)
void IMB_colormanagement_check_file_config (Main *bmain)
void IMB_colormanagement_validate_settings (const ColorManagedDisplaySettings *display_settings, ColorManagedViewSettings *view_settings)
const char * IMB_colormanagement_role_colorspace_name_get (int role)
void IMB_colormanagement_check_is_data (ImBuf *ibuf, const char *name)
void IMB_colormanagegent_copy_settings (ImBuf *ibuf_src, ImBuf *ibuf_dst)
void IMB_colormanagement_assign_float_colorspace (ImBuf *ibuf, const char *name)
void IMB_colormanagement_assign_byte_colorspace (ImBuf *ibuf, const char *name)
const char * IMB_colormanagement_get_float_colorspace (const ImBuf *ibuf)
const char * IMB_colormanagement_get_rect_colorspace (const ImBuf *ibuf)
const char * IMB_colormanagement_space_from_filepath_rules (const char *filepath)
const ColorSpaceIMB_colormanagement_space_get_named (const char *name)
bool IMB_colormanagement_space_is_data (const ColorSpace *colorspace)
bool IMB_colormanagement_space_is_scene_linear (const ColorSpace *colorspace)
bool IMB_colormanagement_space_is_srgb (const ColorSpace *colorspace)
bool IMB_colormanagement_space_name_is_data (const char *name)
bool IMB_colormanagement_space_name_is_scene_linear (const char *name)
bool IMB_colormanagement_space_name_is_srgb (const char *name)
const char * IMB_colormanagement_srgb_colorspace_name_get ()
blender::Vector< char > IMB_colormanagement_space_to_icc_profile (const ColorSpace *colorspace)
bool IMB_colormanagement_space_to_cicp (const ColorSpace *colorspace, const ColorManagedFileOutput output, const bool rgb_matrix, int cicp[4])
const ColorSpaceIMB_colormanagement_space_from_cicp (const int cicp[4], const ColorManagedFileOutput output)
StringRefNull IMB_colormanagement_space_get_interop_id (const ColorSpace *colorspace)
const ColorSpaceIMB_colormanagement_space_from_interop_id (StringRefNull interop_id)
blender::float3x3 IMB_colormanagement_get_xyz_to_scene_linear ()
blender::float3x3 IMB_colormanagement_get_scene_linear_to_xyz ()

Working Space Functions

static const float imb_working_space_compare_threshold = 0.001f
const char * IMB_colormanagement_working_space_get_default ()
int IMB_colormanagement_working_space_get_named_index (const char *name)
const char * IMB_colormanagement_working_space_get_indexed_name (int index)
void IMB_colormanagement_working_space_items_add (EnumPropertyItem **items, int *totitem)
const char * IMB_colormanagement_working_space_get ()
bool IMB_colormanagement_working_space_set_from_name (const char *name)
static bool imb_colormanagement_working_space_set_from_matrix (Main *bmain, const char *name, const blender::float3x3 &scene_linear_to_xyz)
void IMB_colormanagement_working_space_check (Main *bmain, const bool for_undo, const bool have_editable_assets)
static blender::float3 imb_working_space_convert (const blender::float3x3 &m, const bool is_smaller_gamut, const blender::float3 in_rgb)
static blender::ColorGeometry4f imb_working_space_convert (const blender::float3x3 &m, const bool is_smaller_gamut, const blender::ColorGeometry4f color)
void IMB_colormanagement_working_space_convert (Main *bmain, const blender::float3x3 &current_scene_linear_to_xyz, const blender::float3x3 &new_xyz_to_scene_linear, const bool depsgraph_tag, const bool linked_only, const bool editable_assets_only)
void IMB_colormanagement_working_space_convert (Main *bmain, const Main *reference_bmain)
void IMB_colormanagement_working_space_init_default (Main *bmain)
void IMB_colormanagement_working_space_init_startup (Main *bmain)

Rendering Tables

static const float blackbody_table_r [7][3]
static const float blackbody_table_g [7][3]
static const float blackbody_table_b [7][4]
static float cie_color_match [81][3]
static void blackbody_temperature_to_rec709 (float rec709[3], float t)
void IMB_colormanagement_blackbody_temperature_to_rgb (float r_dest[4], float value)
void IMB_colormanagement_blackbody_temperature_to_rgb_table (float *r_table, const int width, const float min, const float max)
static void wavelength_to_xyz (float xyz[3], float lambda_nm)
void IMB_colormanagement_wavelength_to_rgb (float r_dest[4], float value)
void IMB_colormanagement_wavelength_to_rgb_table (float *r_table, const int width)

Macro Definition Documentation

◆ DISPLAY_BUFFER_CHANNELS

#define DISPLAY_BUFFER_CHANNELS   4

Definition at line 91 of file colormanagement.cc.

Referenced by display_buffer_init_handle(), and IMB_display_buffer_acquire().

Typedef Documentation

◆ float3

Definition at line 619 of file BLI_math_vector_types.hh.

◆ float3x3

Definition at line 1008 of file BLI_math_matrix_types.hh.

Function Documentation

◆ blackbody_temperature_to_rec709()

void blackbody_temperature_to_rec709 ( float rec709[3],
float t )
static

◆ colormanage_cache_free()

◆ colormanage_cache_get()

◆ colormanage_cache_get_ibuf()

ImBuf * colormanage_cache_get_ibuf ( ImBuf * ibuf,
ColormanageCacheKey * key,
void ** cache_handle )
static

Definition at line 359 of file colormanagement.cc.

References colormanage_moviecache_get(), and IMB_moviecache_get().

Referenced by colormanage_cache_get().

◆ colormanage_cache_handle_release()

void colormanage_cache_handle_release ( void * cache_handle)
static

Definition at line 478 of file colormanagement.cc.

References IMB_freeImBuf().

Referenced by IMB_display_buffer_release().

◆ colormanage_cache_put()

◆ colormanage_cachedata_get()

ColormanageCacheData * colormanage_cachedata_get ( const ImBuf * ibuf)
static

◆ colormanage_cachedata_set()

void colormanage_cachedata_set ( ImBuf * ibuf,
ColormanageCacheData * data )
static

◆ colormanage_check_colorspace_name()

bool colormanage_check_colorspace_name ( char * name,
const char * what )
static

Definition at line 1070 of file colormanagement.cc.

References CLOG_WARN, g_config, LOG, and name.

Referenced by colormanage_check_colorspace_settings().

◆ colormanage_check_colorspace_settings()

bool colormanage_check_colorspace_settings ( ColorManagedColorspaceSettings * settings,
const char * what )
static

◆ colormanage_check_display_settings()

◆ colormanage_check_view_settings()

◆ colormanage_colorspace_get_named()

const ColorSpace * colormanage_colorspace_get_named ( const char * name)

◆ colormanage_colorspace_get_roled()

const ColorSpace * colormanage_colorspace_get_roled ( const int role)

◆ colormanage_compatible_look() [1/2]

bool colormanage_compatible_look ( const ocio::Look * look,
const char * view_name )
static

Definition at line 732 of file colormanagement.cc.

References colormanage_compatible_look(), and view_filter_for_look().

◆ colormanage_compatible_look() [2/2]

◆ colormanage_display_buffer_process()

void colormanage_display_buffer_process ( ImBuf * ibuf,
uchar * display_buffer,
const ColorManagedViewSettings * view_settings,
const ColorManagedDisplaySettings * display_settings,
const ColorManagedDisplaySpace display_space )
static

Definition at line 2030 of file colormanagement.cc.

References colormanage_display_buffer_process_ex().

Referenced by IMB_display_buffer_acquire().

◆ colormanage_display_buffer_process_ex()

void colormanage_display_buffer_process_ex ( ImBuf * ibuf,
float * display_buffer,
uchar * display_buffer_byte,
const ColorManagedViewSettings * view_settings,
const ColorManagedDisplaySettings * display_settings,
const ColorManagedDisplaySpace display_space )
static

◆ colormanage_display_settings_to_cache()

void colormanage_display_settings_to_cache ( ColormanageCacheDisplaySettings * cache_display_settings,
const ColorManagedDisplaySettings * display_settings )
static

◆ colormanage_find_matching_view_name()

◆ colormanage_free_config()

void colormanage_free_config ( )
static

Definition at line 612 of file colormanagement.cc.

References g_all_view_names, and g_config.

Referenced by colormanagement_exit(), and colormanagement_init().

◆ colormanage_hashcmp()

bool colormanage_hashcmp ( const void * av,
const void * bv )
static

◆ colormanage_hashhash()

uint colormanage_hashhash ( const void * key_v)
static

◆ colormanage_imbuf_make_linear()

◆ colormanage_imbuf_set_default_spaces()

void colormanage_imbuf_set_default_spaces ( ImBuf * ibuf)

◆ colormanage_load_config()

◆ colormanage_moviecache_ensure()

◆ colormanage_moviecache_get()

MovieCache * colormanage_moviecache_get ( const ImBuf * ibuf)
static

◆ colormanage_role_color_space_name_get()

bool colormanage_role_color_space_name_get ( ocio::Config & config,
char * colorspace_name,
const char * role,
const char * backup_role,
const bool optional = false )
static

◆ colormanage_settings_to_key()

◆ colormanage_update_matrices()

◆ colormanage_use_look()

bool colormanage_use_look ( const char * look_name,
const char * view_name )
static

◆ colormanage_view_settings_to_cache()

◆ colormanagement_exit()

void colormanagement_exit ( )

Definition at line 676 of file colormanagement.cc.

References colormanage_free_config(), global_color_picking_state, and global_gpu_state.

Referenced by IMB_exit().

◆ colormanagement_imbuf_make_display_space()

void colormanagement_imbuf_make_display_space ( ImBuf * ibuf,
const ColorManagedViewSettings * view_settings,
const ColorManagedDisplaySettings * display_settings,
const ColorManagedDisplaySpace display_space,
bool make_byte )
static

◆ colormanagement_init()

◆ colormanagement_transform_ex()

void colormanagement_transform_ex ( uchar * byte_buffer,
float * float_buffer,
int width,
int height,
int channels,
const char * from_colorspace,
const char * to_colorspace,
bool predivide )
static

◆ curve_mapping_apply_pixel()

void curve_mapping_apply_pixel ( const CurveMapping * curve_mapping,
float * pixel,
int channels )
static

◆ display_buffer_apply_get_linear_buffer()

◆ display_buffer_apply_threaded()

void display_buffer_apply_threaded ( ImBuf * ibuf,
const float * buffer,
uchar * byte_buffer,
float * display_buffer,
uchar * display_buffer_byte,
ColormanageProcessor * cm_processor )
static

◆ display_buffer_init_handle()

◆ do_display_buffer_apply_no_processor()

◆ do_display_buffer_apply_thread()

◆ do_processor_transform_thread()

◆ get_display_buffer_processor()

◆ get_display_emulation()

◆ IMB_colormanagegent_copy_settings()

◆ IMB_colormanagement_assign_byte_colorspace()

◆ IMB_colormanagement_assign_float_colorspace()

◆ IMB_colormanagement_blackbody_temperature_to_rgb()

◆ IMB_colormanagement_blackbody_temperature_to_rgb_table()

void IMB_colormanagement_blackbody_temperature_to_rgb_table ( float * r_table,
const int width,
const float min,
const float max )

◆ IMB_colormanagement_check_file_config()

◆ IMB_colormanagement_check_is_data()

void IMB_colormanagement_check_is_data ( ImBuf * ibuf,
const char * name )

◆ IMB_colormanagement_color_picking_to_scene_linear_v3()

void IMB_colormanagement_color_picking_to_scene_linear_v3 ( float scene_linear[3],
const float color_picking[3] )

◆ IMB_colormanagement_colorspace_from_ibuf_ftype()

◆ IMB_colormanagement_colorspace_get_indexed_name()

const char * IMB_colormanagement_colorspace_get_indexed_name ( const int index)

◆ IMB_colormanagement_colorspace_get_name()

◆ IMB_colormanagement_colorspace_get_named_index()

int IMB_colormanagement_colorspace_get_named_index ( const char * name)

◆ IMB_colormanagement_colorspace_items_add()

◆ IMB_colormanagement_colorspace_processor_new()

◆ IMB_colormanagement_colorspace_to_scene_linear()

void IMB_colormanagement_colorspace_to_scene_linear ( float * buffer,
int width,
int height,
int channels,
const ColorSpace * colorspace,
bool predivide )

Converts a (width)x(height) block of float pixels from given color space to scene linear space. This is much higher performance than converting pixels one by one.

Definition at line 2341 of file colormanagement.cc.

References blender::ocio::CPUProcessor::apply(), blender::ocio::CPUProcessor::apply_predivide(), blender::ocio::BIT_DEPTH_F32, and printf.

Referenced by blender::seq::pixels_to_scene_linear_byte(), blender::seq::pixels_to_scene_linear_float(), and blender::ed::vse::rgba_float_to_display_space().

◆ IMB_colormanagement_colorspace_to_scene_linear_v3()

void IMB_colormanagement_colorspace_to_scene_linear_v3 ( float pixel[3],
const ColorSpace * colorspace )

◆ IMB_colormanagement_colorspace_to_scene_linear_v4()

void IMB_colormanagement_colorspace_to_scene_linear_v4 ( float pixel[4],
const bool predivide,
const ColorSpace * colorspace )

◆ IMB_colormanagement_display_get_default_name()

const char * IMB_colormanagement_display_get_default_name ( )

◆ IMB_colormanagement_display_get_default_view_transform_name()

const char * IMB_colormanagement_display_get_default_view_transform_name ( const ColorManagedDisplay * display)

◆ IMB_colormanagement_display_get_indexed_name()

const char * IMB_colormanagement_display_get_indexed_name ( const int index)

◆ IMB_colormanagement_display_get_named()

const ColorManagedDisplay * IMB_colormanagement_display_get_named ( const char * name)

◆ IMB_colormanagement_display_get_named_index()

int IMB_colormanagement_display_get_named_index ( const char * name)

Definition at line 3008 of file colormanagement.cc.

References g_config, blender::ocio::Display::index, and name.

Referenced by colormanage_display_settings_to_cache().

◆ IMB_colormanagement_display_get_none_name()

const char * IMB_colormanagement_display_get_none_name ( )

◆ IMB_colormanagement_display_is_hdr()

◆ IMB_colormanagement_display_is_wide_gamut()

bool IMB_colormanagement_display_is_wide_gamut ( const ColorManagedDisplaySettings * display_settings,
const char * view_name )

◆ IMB_colormanagement_display_items_add()

◆ IMB_colormanagement_display_processor_for_imbuf()

ColormanageProcessor * IMB_colormanagement_display_processor_for_imbuf ( const ImBuf * ibuf,
const ColorManagedViewSettings * view_settings,
const ColorManagedDisplaySettings * display_settings,
const ColorManagedDisplaySpace display_space )

◆ IMB_colormanagement_display_processor_needed()

◆ IMB_colormanagement_display_processor_new()

ColormanageProcessor * IMB_colormanagement_display_processor_new ( const ColorManagedViewSettings * view_settings,
const ColorManagedDisplaySettings * display_settings,
const ColorManagedDisplaySpace display_space,
const bool inverse )

◆ IMB_colormanagement_display_settings_from_ctx()

◆ IMB_colormanagement_display_support_emulation()

bool IMB_colormanagement_display_support_emulation ( const ColorManagedDisplaySettings * display_settings,
const char * view_name )

◆ IMB_colormanagement_display_to_scene_linear_v3()

void IMB_colormanagement_display_to_scene_linear_v3 ( float pixel[3],
const ColorManagedDisplay * display,
const ColorManagedDisplaySpace display_space = DISPLAY_SPACE_DRAW )

◆ IMB_colormanagement_finish_glsl_draw()

void IMB_colormanagement_finish_glsl_draw ( )

◆ IMB_colormanagement_get_float_colorspace()

◆ IMB_colormanagement_get_rect_colorspace()

◆ IMB_colormanagement_get_scene_linear_to_xyz()

◆ IMB_colormanagement_get_whitepoint()

void IMB_colormanagement_get_whitepoint ( const float temperature,
const float tint,
float whitepoint[3] )

Functions for converting between color temperature/tint and RGB white points.

Definition at line 1602 of file colormanagement.cc.

References IMB_colormanagement_xyz_to_scene_linear(), and blender::math::whitepoint_from_temp_tint().

◆ IMB_colormanagement_get_xyz_to_scene_linear()

◆ IMB_colormanagement_imbuf_for_write()

ImBuf * IMB_colormanagement_imbuf_for_write ( ImBuf * ibuf,
bool save_as_render,
bool allocate_result,
const ImageFormatData * image_format )

Prepare image buffer to be saved on disk, applying color management if needed color management would be applied if image is saving as render result and if file format is not expecting float buffer to be in linear space (currently JPEG2000 and TIFF are such formats – they're storing image as float but file itself stores applied color space).

Both byte and float buffers would contain applied color space, and result's float_colorspace would be set to display color space. This should be checked in image format write callback and if float_colorspace is not NULL, no color space transformation should be applied on this buffer.

Definition at line 2684 of file colormanagement.cc.

References BKE_image_format_is_byte(), BKE_imtype_requires_linear_float(), ImBuf::byte_buffer, blender::StringRefNull::c_str(), ImBuf::channels, colormanage_colorspace_get_named(), colormanagement_imbuf_make_display_space(), ImBufByteBuffer::colorspace, ImBufFloatBuffer::colorspace, ImBufByteBuffer::data, ImBufFloatBuffer::data, ImageFormatData::display_settings, DISPLAY_SPACE_IMAGE_OUTPUT, DISPLAY_SPACE_VIDEO_OUTPUT, ImBuf::float_buffer, g_config, global_role_default_byte, global_role_scene_linear, IB_DISPLAY_BUFFER_INVALID, IB_RECT_INVALID, IMB_alpha_under_color_byte(), IMB_alpha_under_color_float(), IMB_byte_from_float(), IMB_colormanagement_transform_byte(), IMB_colormanagement_transform_float(), IMB_colormangement_display_get_color_space(), IMB_float_from_byte(), IMB_free_byte_pixels(), imbuf_ensure_editable(), ImageFormatData::imtype, ImageFormatData::linear_colorspace_settings, ImageFormatData::media_type, MEDIA_TYPE_VIDEO, blender::ocio::ColorSpace::name(), ColorManagedColorspaceSettings::name, ImageFormatData::planes, R_IMF_PLANES_RGBA, STREQ, ImBuf::userflags, ImageFormatData::view_settings, ImBuf::x, and ImBuf::y.

Referenced by BKE_image_render_write(), image_clipboard_copy_exec(), image_save_single(), and RE_WriteRenderViewsMovie().

◆ IMB_colormanagement_imbuf_make_display_space()

void IMB_colormanagement_imbuf_make_display_space ( ImBuf * ibuf,
const ColorManagedViewSettings * view_settings,
const ColorManagedDisplaySettings * display_settings,
const ColorManagedDisplaySpace display_space )

Definition at line 2651 of file colormanagement.cc.

References colormanagement_imbuf_make_display_space().

◆ IMB_colormanagement_imbuf_to_byte_texture()

void IMB_colormanagement_imbuf_to_byte_texture ( uchar * out_buffer,
const int offset_x,
const int offset_y,
const int width,
const int height,
const ImBuf * ibuf,
const bool store_premultiplied )

◆ IMB_colormanagement_imbuf_to_float_texture()

◆ IMB_colormanagement_init_untonemapped_view_settings()

◆ IMB_colormanagement_look_get_default_name()

const char * IMB_colormanagement_look_get_default_name ( )

◆ IMB_colormanagement_look_get_indexed_name()

const char * IMB_colormanagement_look_get_indexed_name ( const int index)

◆ IMB_colormanagement_look_get_named_index()

int IMB_colormanagement_look_get_named_index ( const char * name)

Definition at line 3255 of file colormanagement.cc.

References g_config, blender::ocio::Look::index, and name.

Referenced by colormanage_view_settings_to_cache().

◆ IMB_colormanagement_look_items_add()

◆ IMB_colormanagement_look_validate_for_view()

const char * IMB_colormanagement_look_validate_for_view ( const char * view_name,
const char * look_name )

◆ IMB_colormanagement_pixel_to_display_space_v4()

void IMB_colormanagement_pixel_to_display_space_v4 ( float result[4],
const float pixel[4],
const ColorManagedViewSettings * view_settings,
const ColorManagedDisplaySettings * display_settings,
const ColorManagedDisplaySpace display_space )

◆ IMB_colormanagement_processor_apply()

◆ IMB_colormanagement_processor_apply_byte()

void IMB_colormanagement_processor_apply_byte ( ColormanageProcessor * cm_processor,
uchar * buffer,
int width,
int height,
int channels )

◆ IMB_colormanagement_processor_apply_pixel()

◆ IMB_colormanagement_processor_apply_v3()

◆ IMB_colormanagement_processor_apply_v4()

◆ IMB_colormanagement_processor_apply_v4_predivide()

void IMB_colormanagement_processor_apply_v4_predivide ( ColormanageProcessor * cm_processor,
float pixel[4] )

◆ IMB_colormanagement_processor_free()

◆ IMB_colormanagement_processor_is_noop()

bool IMB_colormanagement_processor_is_noop ( ColormanageProcessor * cm_processor)

◆ IMB_colormanagement_role_colorspace_name_get()

const char * IMB_colormanagement_role_colorspace_name_get ( int role)

Definition at line 1208 of file colormanagement.cc.

References BLI_assert, CLOG_WARN, COLOR_ROLE_ACES_INTERCHANGE, COLOR_ROLE_COLOR_PICKING, COLOR_ROLE_DATA, COLOR_ROLE_DEFAULT_BYTE, COLOR_ROLE_DEFAULT_FLOAT, COLOR_ROLE_DEFAULT_SEQUENCER, COLOR_ROLE_SCENE_LINEAR, COLOR_ROLE_TEXTURE_PAINTING, global_role_aces_interchange, global_role_color_picking, global_role_data, global_role_default_byte, global_role_default_float, global_role_default_sequencer, global_role_scene_linear, global_role_texture_painting, and LOG.

Referenced by add_exr_compositing_result(), add_ibuf_for_tile(), blender::io::fbx::add_image_texture(), assign_render_pass_ibuf_colorspace(), BKE_image_add_generated(), BKE_image_format_color_management_copy_from_scene(), BKE_image_format_init_for_write(), BKE_image_format_update_color_space_for_type(), BKE_image_render_write_exr(), BKE_image_save_options_init(), colormanage_colorspace_get_roled(), blender::seq::ensure_linear_float_buffer(), blender::ed::vse::get_texture_colorspace_name(), image_colorspace_from_imbuf(), image_exr_from_scene_linear_to_output(), image_node_colorspace(), IMB_byte_from_float(), IMB_colormanagement_colorspace_from_ibuf_ftype(), IMB_colormanagement_get_float_colorspace(), IMB_colormanagement_get_rect_colorspace(), imb_exr_set_known_colorspace(), imb_handle_colorspace_and_alpha(), blender::ed::sculpt_paint::paint::image::PaintingKernel< ImageBuffer >::init_brush_color(), blender::io::usd::USDMaterialReader::load_tex_image(), openexr_header_metadata_colorspace(), openexr_header_metadata_colorspace(), probe_video_colorspace(), RE_render_result_rect_to_ibuf(), blender::seq::render_imbuf_from_sequencer_space(), blender::seq::render_pixel_from_sequencer_space_v4(), render_result_exr_file_cache_read(), render_result_new_from_exr(), scene_init_data(), seq_process_render_image(), blender::seq::strip_add_set_view_transform(), ui_block_colorpicker(), wm_main_playanim_intern(), blender::ed::object::write_external_bake_pixels(), and blender::ed::object::write_internal_bake_pixels().

◆ IMB_colormanagement_scene_linear_to_color_picking_v3()

void IMB_colormanagement_scene_linear_to_color_picking_v3 ( float color_picking[3],
const float scene_linear[3] )

Conversion between color picking role. Typically we would expect such a requirements:

  • It is approximately perceptually linear, so that the HSV numbers and the HSV cube/circle have an intuitive distribution.
  • It has the same gamut as the scene linear color space.
  • Color picking values 0..1 map to scene linear values in the 0..1 range, so that picked albedo values are energy conserving.

Definition at line 2535 of file colormanagement.cc.

References BLI_mutex_lock(), BLI_mutex_unlock(), copy_v3_v3(), g_config, global_color_picking_state, global_role_color_picking, global_role_scene_linear, and processor_lock.

Referenced by ui_scene_linear_to_perceptual_space().

◆ IMB_colormanagement_scene_linear_to_colorspace()

void IMB_colormanagement_scene_linear_to_colorspace ( float * buffer,
int width,
int height,
int channels,
const ColorSpace * colorspace )

Converts a (width)x(height) block of float pixels from scene linear space to given color space. This is much higher performance than converting pixels one by one.

Definition at line 2373 of file colormanagement.cc.

References blender::ocio::CPUProcessor::apply(), blender::ocio::BIT_DEPTH_F32, and printf.

Referenced by blender::seq::scene_linear_to_image_chunk_byte(), and blender::seq::scene_linear_to_image_chunk_float().

◆ IMB_colormanagement_scene_linear_to_colorspace_v3()

void IMB_colormanagement_scene_linear_to_colorspace_v3 ( float pixel[3],
const ColorSpace * colorspace )

◆ IMB_colormanagement_scene_linear_to_display_v3()

void IMB_colormanagement_scene_linear_to_display_v3 ( float pixel[3],
const ColorManagedDisplay * display,
const ColorManagedDisplaySpace display_space = DISPLAY_SPACE_DRAW )

Convert pixel from scene linear to display space using default view used by performance-critical areas such as color-related widgets where we want to reduce amount of per-widget allocations.

Definition at line 2593 of file colormanagement.cc.

References blender::ocio::CPUProcessor::apply_rgb(), DISPLAY_SPACE_DRAW, and blender::ocio::Display::get_from_scene_linear_cpu_processor().

Referenced by eyedropper_color_set(), ui_block_cm_to_display_space_v3(), ui_draw_but_COLORBAND(), ui_draw_colorband_handle(), ui_draw_gradient_hsv_to_rgb(), and UI_tooltip_color_field_add().

◆ IMB_colormanagement_set_whitepoint()

bool IMB_colormanagement_set_whitepoint ( const float whitepoint[3],
float & temperature,
float & tint )

◆ IMB_colormanagement_setup_glsl_draw()

bool IMB_colormanagement_setup_glsl_draw ( const ColorManagedViewSettings * view_settings,
const ColorManagedDisplaySettings * display_settings,
float dither,
bool predivide )

Configures GLSL shader for conversion from scene linear to display space.

Definition at line 4497 of file colormanagement.cc.

References IMB_colormanagement_setup_glsl_draw_from_space().

Referenced by ED_draw_imbuf_clipping(), and ocio_transform_ibuf().

◆ IMB_colormanagement_setup_glsl_draw_ctx()

bool IMB_colormanagement_setup_glsl_draw_ctx ( const bContext * C,
float dither,
bool predivide )

Same as setup_glsl_draw, but color management settings are guessing from a given context.

Definition at line 4520 of file colormanagement.cc.

References C, and IMB_colormanagement_setup_glsl_draw_from_space_ctx().

◆ IMB_colormanagement_setup_glsl_draw_from_space()

bool IMB_colormanagement_setup_glsl_draw_from_space ( const ColorManagedViewSettings * view_settings,
const ColorManagedDisplaySettings * display_settings,
const ColorSpace * from_colorspace,
float dither,
bool predivide,
bool do_overlay_merge )
Note
Same as IMB_colormanagement_setup_glsl_draw, but display space conversion happens from a specified space.

Configures GLSL shader for conversion from specified to display color space

Will create appropriate OCIO processor and setup GLSL shader, so further 2D texture usage will use this conversion.

When there's no need to apply transform on 2D textures, use IMB_colormanagement_finish_glsl_draw().

This is low-level function, use ED_draw_imbuf_ctx if you only need to display given image buffer

Definition at line 4437 of file colormanagement.cc.

References blender::StringRefNull::c_str(), colormanage_use_look(), COLORMANAGE_VIEW_USE_WHITE_BALANCE, blender::ocio::GPUDisplayParameters::curve_mapping, blender::ocio::GPUDisplayParameters::display, ColorManagedDisplaySettings::display_device, blender::ocio::GPUDisplayParameters::dither, blender::ocio::GPUDisplayParameters::do_overlay_merge, blender::ocio::GPUDisplayParameters::exponent, ColorManagedViewSettings::exposure, ColorManagedViewSettings::flag, blender::ocio::GPUDisplayParameters::from_colorspace, g_config, ColorManagedViewSettings::gamma, get_display_emulation(), global_gpu_state, global_role_scene_linear, GPU_hdr_support(), IMB_colormanagement_display_is_hdr(), IMB_colormanagement_init_untonemapped_view_settings(), blender::ocio::GPUDisplayParameters::look, ColorManagedViewSettings::look, max_ff(), blender::ocio::ColorSpace::name(), powf, blender::ocio::GPUDisplayParameters::scale, blender::ocio::GPUDisplayParameters::temperature, ColorManagedViewSettings::temperature, blender::ocio::GPUDisplayParameters::tint, ColorManagedViewSettings::tint, update_glsl_curve_mapping(), blender::ocio::GPUDisplayParameters::use_display_emulation, blender::ocio::GPUDisplayParameters::use_hdr_buffer, blender::ocio::GPUDisplayParameters::use_hdr_display, blender::ocio::GPUDisplayParameters::use_predivide, blender::ocio::GPUDisplayParameters::use_white_balance, blender::ocio::GPUDisplayParameters::view, and ColorManagedViewSettings::view_transform.

Referenced by ED_draw_imbuf_clipping(), gpu_viewport_draw_colormanaged(), IMB_colormanagement_setup_glsl_draw(), IMB_colormanagement_setup_glsl_draw_from_space_ctx(), ocio_transform_ibuf(), and blender::ed::vse::update_gpu_scopes().

◆ IMB_colormanagement_setup_glsl_draw_from_space_ctx()

bool IMB_colormanagement_setup_glsl_draw_from_space_ctx ( const bContext * C,
const ColorSpace * from_colorspace,
float dither,
bool predivide )

Same as setup_glsl_draw_from_space, but color management settings are guessing from a given context.

Definition at line 4506 of file colormanagement.cc.

References C, IMB_colormanagement_display_settings_from_ctx(), and IMB_colormanagement_setup_glsl_draw_from_space().

Referenced by IMB_colormanagement_setup_glsl_draw_ctx().

◆ IMB_colormanagement_setup_glsl_draw_to_scene_linear()

bool IMB_colormanagement_setup_glsl_draw_to_scene_linear ( const char * from_colorspace_name,
bool predivide )

Configures GPU shader for conversion from the given space to scene linear. Drawing happens in the same immediate mode as when GPU_SHADER_3D_IMAGE_COLOR shader is used.

Returns true if the GPU shader was successfully bound.

Definition at line 4525 of file colormanagement.cc.

References g_config, and global_gpu_state.

Referenced by blender::ed::vse::preview_draw_texture_to_linear().

◆ IMB_colormanagement_space_from_cicp()

◆ IMB_colormanagement_space_from_filepath_rules()

const char * IMB_colormanagement_space_from_filepath_rules ( const char * filepath)

Definition at line 1311 of file colormanagement.cc.

References g_config.

Referenced by imb_handle_colorspace_and_alpha().

◆ IMB_colormanagement_space_from_interop_id()

const ColorSpace * IMB_colormanagement_space_from_interop_id ( StringRefNull interop_id)

◆ IMB_colormanagement_space_get_interop_id()

StringRefNull IMB_colormanagement_space_get_interop_id ( const ColorSpace * colorspace)

◆ IMB_colormanagement_space_get_named()

const ColorSpace * IMB_colormanagement_space_get_named ( const char * name)

◆ IMB_colormanagement_space_is_data()

◆ IMB_colormanagement_space_is_scene_linear()

◆ IMB_colormanagement_space_is_srgb()

◆ IMB_colormanagement_space_name_is_data()

◆ IMB_colormanagement_space_name_is_scene_linear()

◆ IMB_colormanagement_space_name_is_srgb()

bool IMB_colormanagement_space_name_is_srgb ( const char * name)

◆ IMB_colormanagement_space_to_cicp()

◆ IMB_colormanagement_space_to_icc_profile()

◆ IMB_colormanagement_srgb_colorspace_name_get()

const char * IMB_colormanagement_srgb_colorspace_name_get ( )

◆ IMB_colormanagement_transform_byte()

void IMB_colormanagement_transform_byte ( unsigned char * buffer,
int width,
int height,
int channels,
const char * from_colorspace,
const char * to_colorspace )

Convert a byte image buffer from one color space to another.

Definition at line 2217 of file colormanagement.cc.

References colormanagement_transform_ex().

Referenced by IMB_colormanagement_imbuf_for_write().

◆ IMB_colormanagement_transform_byte_to_float()

void IMB_colormanagement_transform_byte_to_float ( float * float_buffer,
unsigned char * byte_buffer,
int width,
int height,
int channels,
const char * from_colorspace,
const char * to_colorspace )

◆ IMB_colormanagement_transform_float()

void IMB_colormanagement_transform_float ( float * buffer,
int width,
int height,
int channels,
const char * from_colorspace,
const char * to_colorspace,
bool predivide )

◆ IMB_colormanagement_transform_v4()

void IMB_colormanagement_transform_v4 ( float pixel[4],
const char * from_colorspace,
const char * to_colorspace )

◆ IMB_colormanagement_validate_settings()

◆ IMB_colormanagement_view_get_default_name()

const char * IMB_colormanagement_view_get_default_name ( const char * display_name)

Definition at line 3136 of file colormanagement.cc.

References g_config, blender::ocio::Display::get_default_view(), and view.

◆ IMB_colormanagement_view_get_id_by_name()

int IMB_colormanagement_view_get_id_by_name ( const char * name)

◆ IMB_colormanagement_view_get_name_by_id()

const char * IMB_colormanagement_view_get_name_by_id ( const int index)

Definition at line 3123 of file colormanagement.cc.

References BLI_assert, and g_all_view_names.

◆ IMB_colormanagement_view_get_raw_or_default_name()

const char * IMB_colormanagement_view_get_raw_or_default_name ( const char * display_name)

◆ IMB_colormanagement_view_items_add()

◆ IMB_colormanagement_wavelength_to_rgb()

void IMB_colormanagement_wavelength_to_rgb ( float r_dest[4],
float value )

◆ IMB_colormanagement_wavelength_to_rgb_table()

void IMB_colormanagement_wavelength_to_rgb_table ( float * r_table,
const int width )

◆ IMB_colormanagement_working_space_check()

◆ IMB_colormanagement_working_space_convert() [1/2]

void IMB_colormanagement_working_space_convert ( Main * bmain,
const blender::float3x3 & current_scene_linear_to_xyz,
const blender::float3x3 & new_xyz_to_scene_linear,
const bool depsgraph_tag,
const bool linked_only,
const bool editable_assets_only )

◆ IMB_colormanagement_working_space_convert() [2/2]

◆ IMB_colormanagement_working_space_get()

const char * IMB_colormanagement_working_space_get ( )

Definition at line 3366 of file colormanagement.cc.

References global_role_scene_linear.

◆ IMB_colormanagement_working_space_get_default()

const char * IMB_colormanagement_working_space_get_default ( )

Definition at line 3319 of file colormanagement.cc.

References global_role_scene_linear_default.

Referenced by wm_set_working_color_space_invoke().

◆ IMB_colormanagement_working_space_get_indexed_name()

const char * IMB_colormanagement_working_space_get_indexed_name ( int index)

◆ IMB_colormanagement_working_space_get_named_index()

int IMB_colormanagement_working_space_get_named_index ( const char * name)

◆ IMB_colormanagement_working_space_init_default()

◆ IMB_colormanagement_working_space_init_startup()

void IMB_colormanagement_working_space_init_startup ( Main * bmain)

◆ IMB_colormanagement_working_space_items_add()

◆ imb_colormanagement_working_space_set_from_matrix()

◆ IMB_colormanagement_working_space_set_from_name()

◆ IMB_colormangement_display_get_color_space()

◆ IMB_display_buffer_acquire()

◆ IMB_display_buffer_acquire_ctx()

uchar * IMB_display_buffer_acquire_ctx ( const bContext * C,
ImBuf * ibuf,
void ** cache_handle )

Same as IMB_display_buffer_acquire but gets view and display settings from context.

Definition at line 2945 of file colormanagement.cc.

References C, IMB_colormanagement_display_settings_from_ctx(), and IMB_display_buffer_acquire().

◆ IMB_display_buffer_release()

◆ IMB_display_buffer_transform_apply()

void IMB_display_buffer_transform_apply ( uchar * display_buffer,
float * linear_buffer,
int width,
int height,
int channels,
const ColorManagedViewSettings * view_settings,
const ColorManagedDisplaySettings * display_settings,
bool predivide )

◆ IMB_partial_display_buffer_update()

void IMB_partial_display_buffer_update ( ImBuf * ibuf,
const float * linear_buffer,
const uchar * byte_buffer,
int stride,
int offset_x,
int offset_y,
const ColorManagedViewSettings * view_settings,
const ColorManagedDisplaySettings * display_settings,
int xmin,
int ymin,
int xmax,
int ymax )

Definition at line 4112 of file colormanagement.cc.

References imb_partial_display_buffer_update_ex().

Referenced by image_buffer_rect_update().

◆ IMB_partial_display_buffer_update_delayed()

void IMB_partial_display_buffer_update_delayed ( ImBuf * ibuf,
int xmin,
int ymin,
int xmax,
int ymax )

◆ imb_partial_display_buffer_update_ex()

◆ IMB_partial_display_buffer_update_threaded()

void IMB_partial_display_buffer_update_threaded ( ImBuf * ibuf,
const float * linear_buffer,
const uchar * byte_buffer,
int stride,
int offset_x,
int offset_y,
const ColorManagedViewSettings * view_settings,
const ColorManagedDisplaySettings * display_settings,
int xmin,
int ymin,
int xmax,
int ymax )

Definition at line 4140 of file colormanagement.cc.

References imb_partial_display_buffer_update_ex().

Referenced by IMB_display_buffer_acquire().

◆ imb_working_space_convert() [1/2]

blender::ColorGeometry4f imb_working_space_convert ( const blender::float3x3 & m,
const bool is_smaller_gamut,
const blender::ColorGeometry4f color )
static

◆ imb_working_space_convert() [2/2]

blender::float3 imb_working_space_convert ( const blender::float3x3 & m,
const bool is_smaller_gamut,
const blender::float3 in_rgb )
static

◆ imbuf_ensure_editable()

ImBuf * imbuf_ensure_editable ( ImBuf * ibuf,
ImBuf * colormanaged_ibuf,
bool allocate_result )
static

◆ is_colorspace_same_as_display()

◆ partial_buffer_update_rect()

◆ processor_transform_apply_threaded()

void processor_transform_apply_threaded ( uchar * byte_buffer,
float * float_buffer,
const int width,
const int height,
const int channels,
ColormanageProcessor * cm_processor,
const bool predivide,
const bool float_from_byte )
static

◆ processor_transform_init_handle()

◆ update_glsl_curve_mapping()

◆ view_filter_for_look()

◆ wavelength_to_xyz()

void wavelength_to_xyz ( float xyz[3],
float lambda_nm )
static

Definition at line 4676 of file colormanagement.cc.

References cie_color_match, float, and i.

Referenced by IMB_colormanagement_wavelength_to_rgb().

Variable Documentation

◆ blackbody_table_b

const float blackbody_table_b[7][4]
static
Initial value:
= {
{5.96945309e-11f, -4.85742887e-08f, -9.70622247e-05f, -4.07936148e-03f},
{2.40430366e-11f, 5.55021075e-08f, -1.98503712e-04f, 2.89312858e-02f},
{-1.40949732e-11f, 1.89878968e-07f, -3.56632824e-04f, 9.10767778e-02f},
{-3.61460868e-11f, 2.84822009e-07f, -4.93211319e-04f, 1.56723440e-01f},
{-1.97075738e-11f, 1.75359352e-07f, -2.50542825e-04f, -2.22783266e-02f},
{-1.61997957e-13f, -1.64216008e-08f, 3.86216271e-04f, -7.38077418e-01f},
{6.72650283e-13f, -2.73078809e-08f, 4.24098264e-04f, -7.52335691e-01f}}

Definition at line 4570 of file colormanagement.cc.

Referenced by blackbody_temperature_to_rec709(), and svm_math_blackbody_color_rec709().

◆ blackbody_table_g

const float blackbody_table_g[7][3]
static
Initial value:
= {
{-4.88999748e+02f, 6.04330754e-04f, -7.55807526e-02f},
{-7.55994277e+02f, 3.16730098e-04f, 4.78306139e-01f},
{-1.02363977e+03f, 1.20223470e-04f, 9.36662319e-01f},
{-1.26571316e+03f, 4.87340896e-06f, 1.27054498e+00f},
{-1.42529332e+03f, -4.01150431e-05f, 1.43972784e+00f},
{-1.17554822e+03f, -2.16378048e-05f, 1.30408023e+00f},
{-5.00799571e+02f, -4.59832026e-06f, 1.09098763e+00f}}

Definition at line 4561 of file colormanagement.cc.

Referenced by blackbody_temperature_to_rec709(), and svm_math_blackbody_color_rec709().

◆ blackbody_table_r

const float blackbody_table_r[7][3]
static
Initial value:
= {{1.61919106e+03f, -2.05010916e-03f, 5.02995757e+00f},
{2.48845471e+03f, -1.11330907e-03f, 3.22621544e+00f},
{3.34143193e+03f, -4.86551192e-04f, 1.76486769e+00f},
{4.09461742e+03f, -1.27446582e-04f, 7.25731635e-01f},
{4.67028036e+03f, 2.91258199e-05f, 1.26703442e-01f},
{4.59509185e+03f, 2.87495649e-05f, 1.50345020e-01f},
{3.78717450e+03f, 9.35907826e-06f, 3.99075871e-01f}}

Definition at line 4553 of file colormanagement.cc.

Referenced by blackbody_temperature_to_rec709(), and svm_math_blackbody_color_rec709().

◆ CICP_MATRIX_BT709

const int CICP_MATRIX_BT709 = 1
static

Definition at line 1439 of file colormanagement.cc.

Referenced by IMB_colormanagement_space_to_cicp().

◆ CICP_MATRIX_REC2020_NCL

const int CICP_MATRIX_REC2020_NCL = 9
static

Definition at line 1440 of file colormanagement.cc.

Referenced by IMB_colormanagement_space_to_cicp().

◆ CICP_MATRIX_RGB

const int CICP_MATRIX_RGB = 0
static

Definition at line 1438 of file colormanagement.cc.

Referenced by IMB_colormanagement_space_to_cicp().

◆ CICP_PRI_P3D65

const int CICP_PRI_P3D65 = 12
static

◆ CICP_PRI_REC2020

const int CICP_PRI_REC2020 = 9
static

◆ CICP_PRI_REC709

const int CICP_PRI_REC709 = 1
static

◆ CICP_RANGE_FULL

const int CICP_RANGE_FULL = 1
static

Definition at line 1442 of file colormanagement.cc.

Referenced by IMB_colormanagement_space_to_cicp().

◆ CICP_TRC_BT709

const int CICP_TRC_BT709 = 1
static

◆ CICP_TRC_G22

const int CICP_TRC_G22 = 4
static

◆ CICP_TRC_G26

const int CICP_TRC_G26 = 17
static

◆ CICP_TRC_HLG

const int CICP_TRC_HLG = 18
static

◆ CICP_TRC_PQ

const int CICP_TRC_PQ = 16
static

◆ CICP_TRC_SRGB

const int CICP_TRC_SRGB = 13
static

◆ cie_color_match

float cie_color_match[81][3]
static
Initial value:
= {
{0.0014f, 0.0000f, 0.0065f}, {0.0022f, 0.0001f, 0.0105f}, {0.0042f, 0.0001f, 0.0201f},
{0.0076f, 0.0002f, 0.0362f}, {0.0143f, 0.0004f, 0.0679f}, {0.0232f, 0.0006f, 0.1102f},
{0.0435f, 0.0012f, 0.2074f}, {0.0776f, 0.0022f, 0.3713f}, {0.1344f, 0.0040f, 0.6456f},
{0.2148f, 0.0073f, 1.0391f}, {0.2839f, 0.0116f, 1.3856f}, {0.3285f, 0.0168f, 1.6230f},
{0.3483f, 0.0230f, 1.7471f}, {0.3481f, 0.0298f, 1.7826f}, {0.3362f, 0.0380f, 1.7721f},
{0.3187f, 0.0480f, 1.7441f}, {0.2908f, 0.0600f, 1.6692f}, {0.2511f, 0.0739f, 1.5281f},
{0.1954f, 0.0910f, 1.2876f}, {0.1421f, 0.1126f, 1.0419f}, {0.0956f, 0.1390f, 0.8130f},
{0.0580f, 0.1693f, 0.6162f}, {0.0320f, 0.2080f, 0.4652f}, {0.0147f, 0.2586f, 0.3533f},
{0.0049f, 0.3230f, 0.2720f}, {0.0024f, 0.4073f, 0.2123f}, {0.0093f, 0.5030f, 0.1582f},
{0.0291f, 0.6082f, 0.1117f}, {0.0633f, 0.7100f, 0.0782f}, {0.1096f, 0.7932f, 0.0573f},
{0.1655f, 0.8620f, 0.0422f}, {0.2257f, 0.9149f, 0.0298f}, {0.2904f, 0.9540f, 0.0203f},
{0.3597f, 0.9803f, 0.0134f}, {0.4334f, 0.9950f, 0.0087f}, {0.5121f, 1.0000f, 0.0057f},
{0.5945f, 0.9950f, 0.0039f}, {0.6784f, 0.9786f, 0.0027f}, {0.7621f, 0.9520f, 0.0021f},
{0.8425f, 0.9154f, 0.0018f}, {0.9163f, 0.8700f, 0.0017f}, {0.9786f, 0.8163f, 0.0014f},
{1.0263f, 0.7570f, 0.0011f}, {1.0567f, 0.6949f, 0.0010f}, {1.0622f, 0.6310f, 0.0008f},
{1.0456f, 0.5668f, 0.0006f}, {1.0026f, 0.5030f, 0.0003f}, {0.9384f, 0.4412f, 0.0002f},
{0.8544f, 0.3810f, 0.0002f}, {0.7514f, 0.3210f, 0.0001f}, {0.6424f, 0.2650f, 0.0000f},
{0.5419f, 0.2170f, 0.0000f}, {0.4479f, 0.1750f, 0.0000f}, {0.3608f, 0.1382f, 0.0000f},
{0.2835f, 0.1070f, 0.0000f}, {0.2187f, 0.0816f, 0.0000f}, {0.1649f, 0.0610f, 0.0000f},
{0.1212f, 0.0446f, 0.0000f}, {0.0874f, 0.0320f, 0.0000f}, {0.0636f, 0.0232f, 0.0000f},
{0.0468f, 0.0170f, 0.0000f}, {0.0329f, 0.0119f, 0.0000f}, {0.0227f, 0.0082f, 0.0000f},
{0.0158f, 0.0057f, 0.0000f}, {0.0114f, 0.0041f, 0.0000f}, {0.0081f, 0.0029f, 0.0000f},
{0.0058f, 0.0021f, 0.0000f}, {0.0041f, 0.0015f, 0.0000f}, {0.0029f, 0.0010f, 0.0000f},
{0.0020f, 0.0007f, 0.0000f}, {0.0014f, 0.0005f, 0.0000f}, {0.0010f, 0.0004f, 0.0000f},
{0.0007f, 0.0002f, 0.0000f}, {0.0005f, 0.0002f, 0.0000f}, {0.0003f, 0.0001f, 0.0000f},
{0.0002f, 0.0001f, 0.0000f}, {0.0002f, 0.0001f, 0.0000f}, {0.0001f, 0.0000f, 0.0000f},
{0.0001f, 0.0000f, 0.0000f}, {0.0001f, 0.0000f, 0.0000f}, {0.0000f, 0.0000f, 0.0000f}}

CIE color matching functions xBar, yBar, and zBar for wavelengths from 380 through 780 nanometers, every 5 nanometers.

For a wavelength lambda in this range:

cie_color_match[(lambda - 380) / 5][0] = xBar
cie_color_match[(lambda - 380) / 5][1] = yBar
cie_color_match[(lambda - 380) / 5][2] = zBar
static float cie_color_match[81][3]

Definition at line 4647 of file colormanagement.cc.

Referenced by svm_math_wavelength_color_xyz(), and wavelength_to_xyz().

◆ g_all_view_names

◆ g_config

std::unique_ptr<ocio::Config> g_config = nullptr
static

Definition at line 87 of file colormanagement.cc.

Referenced by colormanage_check_colorspace_name(), colormanage_check_display_settings(), colormanage_check_view_settings(), colormanage_colorspace_get_named(), colormanage_free_config(), colormanage_imbuf_make_linear(), colormanage_imbuf_set_default_spaces(), colormanage_load_config(), colormanage_update_matrices(), colormanage_use_look(), colormanagement_init(), get_display_buffer_processor(), IMB_colormanagement_assign_byte_colorspace(), IMB_colormanagement_assign_float_colorspace(), IMB_colormanagement_check_file_config(), IMB_colormanagement_check_is_data(), IMB_colormanagement_color_picking_to_scene_linear_v3(), IMB_colormanagement_colorspace_from_ibuf_ftype(), IMB_colormanagement_colorspace_get_indexed_name(), IMB_colormanagement_colorspace_get_named_index(), IMB_colormanagement_colorspace_items_add(), IMB_colormanagement_colorspace_processor_new(), IMB_colormanagement_display_get_default_name(), IMB_colormanagement_display_get_indexed_name(), IMB_colormanagement_display_get_named(), IMB_colormanagement_display_get_named_index(), IMB_colormanagement_display_get_none_name(), IMB_colormanagement_display_is_hdr(), IMB_colormanagement_display_is_wide_gamut(), IMB_colormanagement_display_items_add(), IMB_colormanagement_display_support_emulation(), IMB_colormanagement_finish_glsl_draw(), IMB_colormanagement_imbuf_for_write(), IMB_colormanagement_look_get_default_name(), IMB_colormanagement_look_get_indexed_name(), IMB_colormanagement_look_get_named_index(), IMB_colormanagement_look_items_add(), IMB_colormanagement_look_validate_for_view(), IMB_colormanagement_scene_linear_to_color_picking_v3(), IMB_colormanagement_setup_glsl_draw_from_space(), IMB_colormanagement_setup_glsl_draw_to_scene_linear(), IMB_colormanagement_space_from_cicp(), IMB_colormanagement_space_from_filepath_rules(), IMB_colormanagement_space_from_interop_id(), IMB_colormanagement_space_get_named(), IMB_colormanagement_space_name_is_data(), IMB_colormanagement_space_name_is_scene_linear(), IMB_colormanagement_space_name_is_srgb(), IMB_colormanagement_srgb_colorspace_name_get(), IMB_colormanagement_validate_settings(), IMB_colormanagement_view_get_default_name(), IMB_colormanagement_view_get_raw_or_default_name(), IMB_colormanagement_view_items_add(), IMB_colormanagement_working_space_items_add(), imb_colormanagement_working_space_set_from_matrix(), IMB_colormanagement_working_space_set_from_name(), IMB_colormangement_display_get_color_space(), IMB_display_buffer_acquire(), imb_partial_display_buffer_update_ex(), is_colorspace_same_as_display(), and view_filter_for_look().

◆ g_config_is_custom

bool g_config_is_custom = false
static

◆ global_color_picking_state

◆ global_gpu_state

◆ global_role_aces_interchange

char global_role_aces_interchange[MAX_COLORSPACE_NAME]
static

◆ global_role_color_picking

◆ global_role_data

char global_role_data[MAX_COLORSPACE_NAME]
static

◆ global_role_default_byte

◆ global_role_default_float

◆ global_role_default_float_default

char global_role_default_float_default[MAX_COLORSPACE_NAME]
static

◆ global_role_default_sequencer

◆ global_role_scene_linear

◆ global_role_scene_linear_default

◆ global_role_texture_painting

char global_role_texture_painting[MAX_COLORSPACE_NAME]
static

◆ global_scene_linear_to_xyz_default

◆ imb_working_space_compare_threshold

const float imb_working_space_compare_threshold = 0.001f
static

◆ LOG

CLG_LogRef LOG = {"color_management"}
static

Definition at line 73 of file colormanagement.cc.

◆ processor_lock