Blender V4.3
ocio_capi.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2012 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#ifndef __OCIO_CAPI_H__
6#define __OCIO_CAPI_H__
7
8#ifdef __cplusplus
9extern "C" {
10#endif
11
13
14#define OCIO_DECLARE_HANDLE(name) \
15 struct name; \
16 typedef struct name *name##Ptr;
17
18#define OCIO_ROLE_DATA "data"
19#define OCIO_ROLE_SCENE_LINEAR "scene_linear"
20#define OCIO_ROLE_COLOR_PICKING "color_picking"
21#define OCIO_ROLE_TEXTURE_PAINT "texture_paint"
22#define OCIO_ROLE_DEFAULT_BYTE "default_byte"
23#define OCIO_ROLE_DEFAULT_FLOAT "default_float"
24#define OCIO_ROLE_DEFAULT_SEQUENCER "default_sequencer"
25
26OCIO_DECLARE_HANDLE(OCIO_ConstConfigRc);
27OCIO_DECLARE_HANDLE(OCIO_ConstColorSpaceRc);
28OCIO_DECLARE_HANDLE(OCIO_ConstProcessorRc);
29OCIO_DECLARE_HANDLE(OCIO_ConstCPUProcessorRc);
30OCIO_DECLARE_HANDLE(OCIO_ConstContextRc);
31OCIO_DECLARE_HANDLE(OCIO_PackedImageDesc);
32OCIO_DECLARE_HANDLE(OCIO_ConstLookRc);
33
34/* Standard XYZ (D65) to linear Rec.709 transform. */
35static const float OCIO_XYZ_TO_REC709[3][3] = {{3.2404542f, -0.9692660f, 0.0556434f},
36 {-1.5371385f, 1.8760108f, -0.2040259f},
37 {-0.4985314f, 0.0415560f, 1.0572252f}};
38/* Standard ACES to XYZ (D65) transform.
39 * Matches OpenColorIO builtin transform: UTILITY - ACES-AP0_to_CIE-XYZ-D65_BFD. */
40static const float OCIO_ACES_TO_XYZ[3][3] = {{0.938280f, 0.337369f, 0.001174f},
41 {-0.004451f, 0.729522f, -0.003711f},
42 {0.016628f, -0.066890f, 1.091595f}};
43
44/* This structure is used to pass curve mapping settings from
45 * blender's DNA structure stored in view transform settings
46 * to a generic OpenColorIO C-API.
47 */
49 /* This is a LUT which contain values for all 4 curve mapping tables
50 * (combined, R, G and B).
51 *
52 * Element I for table T is stored at I * 4 + T element of this LUT.
53 *
54 * This array is usually returned by curvemapping_table_RGBA().
55 */
56 float *lut;
57
58 /* Size of single curve mapping table, 1/4 size of lut array. */
60
61 /* Extend extrapolation flags for all the tables.
62 * if use_extend_extrapolate != 0 means extrapolation for
63 * curve.
64 */
66
67 /* Minimal X value of the curve mapping tables. */
68 float mintable[4];
69
70 /* Per curve mapping table range. */
71 float range[4];
72
73 /* Lower extension value, stored as per-component arrays. */
74 float ext_in_x[4], ext_in_y[4];
75
76 /* Higher extension value, stored as per-component arrays. */
77 float ext_out_x[4], ext_out_y[4];
78
79 /* First points of the tables, both X and Y values.
80 * Needed for easier and faster access when extrapolating.
81 */
82 float first_x[4], first_y[4];
83
84 /* Last points of the tables, both X and Y values.
85 * Needed for easier and faster access when extrapolating.
86 */
87 float last_x[4], last_y[4];
88
89 /* Premultiplication settings: black level and scale to match
90 * with white level.
91 */
92 float black[3], bwmul[3];
93
94 /* Cache id of the original curve mapping, used to detect when
95 * upload of new settings to GPU is needed.
96 */
97 size_t cache_id;
99
100void OCIO_init(void);
101void OCIO_exit(void);
102
103OCIO_ConstConfigRcPtr *OCIO_getCurrentConfig(void);
104void OCIO_setCurrentConfig(const OCIO_ConstConfigRcPtr *config);
105
106OCIO_ConstConfigRcPtr *OCIO_configCreateFromEnv(void);
107OCIO_ConstConfigRcPtr *OCIO_configCreateFromFile(const char *filename);
108OCIO_ConstConfigRcPtr *OCIO_configCreateFallback(void);
109
110void OCIO_configRelease(OCIO_ConstConfigRcPtr *config);
111
112int OCIO_configGetNumColorSpaces(OCIO_ConstConfigRcPtr *config);
113const char *OCIO_configGetColorSpaceNameByIndex(OCIO_ConstConfigRcPtr *config, int index);
114OCIO_ConstColorSpaceRcPtr *OCIO_configGetColorSpace(OCIO_ConstConfigRcPtr *config,
115 const char *name);
116int OCIO_configGetIndexForColorSpace(OCIO_ConstConfigRcPtr *config, const char *name);
117
118int OCIO_colorSpaceIsInvertible(OCIO_ConstColorSpaceRcPtr *cs);
119int OCIO_colorSpaceIsData(OCIO_ConstColorSpaceRcPtr *cs);
120void OCIO_colorSpaceIsBuiltin(OCIO_ConstConfigRcPtr *config,
121 OCIO_ConstColorSpaceRcPtr *cs,
122 bool *is_scene_linear,
123 bool *is_srgb);
124
125void OCIO_colorSpaceRelease(OCIO_ConstColorSpaceRcPtr *cs);
126
127const char *OCIO_configGetDefaultDisplay(OCIO_ConstConfigRcPtr *config);
128int OCIO_configGetNumDisplays(OCIO_ConstConfigRcPtr *config);
129const char *OCIO_configGetDisplay(OCIO_ConstConfigRcPtr *config, int index);
130const char *OCIO_configGetDefaultView(OCIO_ConstConfigRcPtr *config, const char *display);
131int OCIO_configGetNumViews(OCIO_ConstConfigRcPtr *config, const char *display);
132const char *OCIO_configGetView(OCIO_ConstConfigRcPtr *config, const char *display, int index);
133const char *OCIO_configGetDisplayColorSpaceName(OCIO_ConstConfigRcPtr *config,
134 const char *display,
135 const char *view);
136
137void OCIO_configGetDefaultLumaCoefs(OCIO_ConstConfigRcPtr *config, float *rgb);
138void OCIO_configGetXYZtoSceneLinear(OCIO_ConstConfigRcPtr *config,
139 float xyz_to_scene_linear[3][3]);
140
141int OCIO_configGetNumLooks(OCIO_ConstConfigRcPtr *config);
142const char *OCIO_configGetLookNameByIndex(OCIO_ConstConfigRcPtr *config, int index);
143OCIO_ConstLookRcPtr *OCIO_configGetLook(OCIO_ConstConfigRcPtr *config, const char *name);
144
145const char *OCIO_lookGetProcessSpace(OCIO_ConstLookRcPtr *look);
146void OCIO_lookRelease(OCIO_ConstLookRcPtr *look);
147
148OCIO_ConstProcessorRcPtr *OCIO_configGetProcessorWithNames(OCIO_ConstConfigRcPtr *config,
149 const char *srcName,
150 const char *dstName);
151void OCIO_processorRelease(OCIO_ConstProcessorRcPtr *cpu_processor);
152
153OCIO_ConstCPUProcessorRcPtr *OCIO_processorGetCPUProcessor(OCIO_ConstProcessorRcPtr *processor);
156 struct OCIO_PackedImageDesc *img);
158 struct OCIO_PackedImageDesc *img);
159void OCIO_cpuProcessorApplyRGB(OCIO_ConstCPUProcessorRcPtr *cpu_processor, float *pixel);
160void OCIO_cpuProcessorApplyRGBA(OCIO_ConstCPUProcessorRcPtr *cpu_processor, float *pixel);
162 float *pixel);
164
165const char *OCIO_colorSpaceGetName(OCIO_ConstColorSpaceRcPtr *cs);
166const char *OCIO_colorSpaceGetDescription(OCIO_ConstColorSpaceRcPtr *cs);
167const char *OCIO_colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr *cs);
168int OCIO_colorSpaceGetNumAliases(OCIO_ConstColorSpaceRcPtr *cs);
169const char *OCIO_colorSpaceGetAlias(OCIO_ConstColorSpaceRcPtr *cs, const int index);
170
171OCIO_ConstProcessorRcPtr *OCIO_createDisplayProcessor(OCIO_ConstConfigRcPtr *config,
172 const char *input,
173 const char *view,
174 const char *display,
175 const char *look,
176 const float scale,
177 const float exponent,
178 const float temperature,
179 const float tint,
180 const bool use_white_balance,
181 const bool inverse);
182
183struct OCIO_PackedImageDesc *OCIO_createOCIO_PackedImageDesc(float *data,
184 long width,
185 long height,
186 long numChannels,
187 long chanStrideBytes,
188 long xStrideBytes,
189 long yStrideBytes);
190
191void OCIO_PackedImageDescRelease(struct OCIO_PackedImageDesc *p);
192
193bool OCIO_supportGPUShader(void);
194bool OCIO_gpuDisplayShaderBind(OCIO_ConstConfigRcPtr *config,
195 const char *input,
196 const char *view,
197 const char *display,
198 const char *look,
199 OCIO_CurveMappingSettings *curve_mapping_settings,
200 const float scale,
201 const float exponent,
202 const float dither,
203 const float temperature,
204 const float tint,
205 const bool use_predivide,
206 const bool use_overlay,
207 const bool use_hdr,
208 const bool use_white_balance);
210void OCIO_gpuCacheFree(void);
211
212const char *OCIO_getVersionString(void);
213int OCIO_getVersionHex(void);
214
215#ifdef __cplusplus
216}
217#endif
218
219#endif /* OCIO_CAPI_H */
struct OCIO_ConstCPUProcessorRc * OCIO_ConstCPUProcessorRcPtr
btMatrix3x3 inverse() const
Return the inverse of the matrix.
const char * OCIO_configGetDefaultView(OCIO_ConstConfigRcPtr *config, const char *display)
Definition ocio_capi.cc:95
void OCIO_processorRelease(OCIO_ConstProcessorRcPtr *cpu_processor)
Definition ocio_capi.cc:182
void OCIO_cpuProcessorApplyRGB(OCIO_ConstCPUProcessorRcPtr *cpu_processor, float *pixel)
Definition ocio_capi.cc:208
void OCIO_cpuProcessorApplyRGBA(OCIO_ConstCPUProcessorRcPtr *cpu_processor, float *pixel)
Definition ocio_capi.cc:213
void OCIO_cpuProcessorApplyRGBA_predivide(OCIO_ConstCPUProcessorRcPtr *cpu_processor, float *pixel)
Definition ocio_capi.cc:218
bool OCIO_supportGPUShader(void)
Definition ocio_capi.cc:295
static const float OCIO_XYZ_TO_REC709[3][3]
Definition ocio_capi.h:35
const char * OCIO_colorSpaceGetName(OCIO_ConstColorSpaceRcPtr *cs)
Definition ocio_capi.cc:228
void OCIO_configGetXYZtoSceneLinear(OCIO_ConstConfigRcPtr *config, float xyz_to_scene_linear[3][3])
Definition ocio_capi.cc:122
const char * OCIO_configGetColorSpaceNameByIndex(OCIO_ConstConfigRcPtr *config, int index)
Definition ocio_capi.cc:64
bool OCIO_gpuDisplayShaderBind(OCIO_ConstConfigRcPtr *config, const char *input, const char *view, const char *display, const char *look, OCIO_CurveMappingSettings *curve_mapping_settings, const float scale, const float exponent, const float dither, const float temperature, const float tint, const bool use_predivide, const bool use_overlay, const bool use_hdr, const bool use_white_balance)
Definition ocio_capi.cc:300
void OCIO_lookRelease(OCIO_ConstLookRcPtr *look)
Definition ocio_capi.cc:147
const char * OCIO_configGetDisplayColorSpaceName(OCIO_ConstConfigRcPtr *config, const char *display, const char *view)
Definition ocio_capi.cc:110
void OCIO_gpuCacheFree(void)
Definition ocio_capi.cc:338
void OCIO_colorSpaceIsBuiltin(OCIO_ConstConfigRcPtr *config, OCIO_ConstColorSpaceRcPtr *cs, bool *is_scene_linear, bool *is_srgb)
Definition ocio_capi.cc:162
OCIO_ConstConfigRcPtr * OCIO_configCreateFromFile(const char *filename)
Definition ocio_capi.cc:49
void OCIO_colorSpaceRelease(OCIO_ConstColorSpaceRcPtr *cs)
Definition ocio_capi.cc:170
OCIO_ConstColorSpaceRcPtr * OCIO_configGetColorSpace(OCIO_ConstConfigRcPtr *config, const char *name)
Definition ocio_capi.cc:69
const char * OCIO_configGetDefaultDisplay(OCIO_ConstConfigRcPtr *config)
Definition ocio_capi.cc:80
OCIO_ConstLookRcPtr * OCIO_configGetLook(OCIO_ConstConfigRcPtr *config, const char *name)
Definition ocio_capi.cc:137
const char * OCIO_colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr *cs)
Definition ocio_capi.cc:238
int OCIO_colorSpaceGetNumAliases(OCIO_ConstColorSpaceRcPtr *cs)
Definition ocio_capi.cc:243
const char * OCIO_lookGetProcessSpace(OCIO_ConstLookRcPtr *look)
Definition ocio_capi.cc:142
OCIO_ConstProcessorRcPtr * OCIO_createDisplayProcessor(OCIO_ConstConfigRcPtr *config, const char *input, const char *view, const char *display, const char *look, const float scale, const float exponent, const float temperature, const float tint, const bool use_white_balance, const bool inverse)
Definition ocio_capi.cc:253
OCIO_ConstCPUProcessorRcPtr * OCIO_processorGetCPUProcessor(OCIO_ConstProcessorRcPtr *processor)
Definition ocio_capi.cc:187
OCIO_ConstConfigRcPtr * OCIO_configCreateFallback(void)
Definition ocio_capi.cc:31
void OCIO_init(void)
Definition ocio_capi.cc:11
OCIO_ConstProcessorRcPtr * OCIO_configGetProcessorWithNames(OCIO_ConstConfigRcPtr *config, const char *srcName, const char *dstName)
Definition ocio_capi.cc:175
const char * OCIO_configGetDisplay(OCIO_ConstConfigRcPtr *config, int index)
Definition ocio_capi.cc:90
void OCIO_cpuProcessorApply(OCIO_ConstCPUProcessorRcPtr *cpu_processor, struct OCIO_PackedImageDesc *img)
Definition ocio_capi.cc:197
void OCIO_setCurrentConfig(const OCIO_ConstConfigRcPtr *config)
Definition ocio_capi.cc:39
OCIO_ConstConfigRcPtr * OCIO_configCreateFromEnv(void)
Definition ocio_capi.cc:44
int OCIO_configGetNumColorSpaces(OCIO_ConstConfigRcPtr *config)
Definition ocio_capi.cc:59
void OCIO_gpuDisplayShaderUnbind(void)
Definition ocio_capi.cc:333
void OCIO_configRelease(OCIO_ConstConfigRcPtr *config)
Definition ocio_capi.cc:54
OCIO_ConstConfigRcPtr * OCIO_getCurrentConfig(void)
Definition ocio_capi.cc:26
int OCIO_configGetNumViews(OCIO_ConstConfigRcPtr *config, const char *display)
Definition ocio_capi.cc:100
struct OCIO_PackedImageDesc * OCIO_createOCIO_PackedImageDesc(float *data, long width, long height, long numChannels, long chanStrideBytes, long xStrideBytes, long yStrideBytes)
Definition ocio_capi.cc:278
void OCIO_cpuProcessorRelease(OCIO_ConstCPUProcessorRcPtr *processor)
Definition ocio_capi.cc:223
int OCIO_configGetIndexForColorSpace(OCIO_ConstConfigRcPtr *config, const char *name)
Definition ocio_capi.cc:75
void OCIO_cpuProcessorApply_predivide(OCIO_ConstCPUProcessorRcPtr *cpu_processor, struct OCIO_PackedImageDesc *img)
Definition ocio_capi.cc:202
const char * OCIO_colorSpaceGetAlias(OCIO_ConstColorSpaceRcPtr *cs, const int index)
Definition ocio_capi.cc:248
struct OCIO_CurveMappingSettings OCIO_CurveMappingSettings
int OCIO_colorSpaceIsInvertible(OCIO_ConstColorSpaceRcPtr *cs)
Definition ocio_capi.cc:152
void OCIO_exit(void)
Definition ocio_capi.cc:20
const char * OCIO_configGetLookNameByIndex(OCIO_ConstConfigRcPtr *config, int index)
Definition ocio_capi.cc:132
static const float OCIO_ACES_TO_XYZ[3][3]
Definition ocio_capi.h:40
int OCIO_getVersionHex(void)
Definition ocio_capi.cc:348
#define OCIO_DECLARE_HANDLE(name)
Definition ocio_capi.h:14
const char * OCIO_configGetView(OCIO_ConstConfigRcPtr *config, const char *display, int index)
Definition ocio_capi.cc:105
bool OCIO_cpuProcessorIsNoOp(OCIO_ConstCPUProcessorRcPtr *cpu_processor)
Definition ocio_capi.cc:192
int OCIO_configGetNumLooks(OCIO_ConstConfigRcPtr *config)
Definition ocio_capi.cc:127
const char * OCIO_getVersionString(void)
Definition ocio_capi.cc:343
int OCIO_configGetNumDisplays(OCIO_ConstConfigRcPtr *config)
Definition ocio_capi.cc:85
int OCIO_colorSpaceIsData(OCIO_ConstColorSpaceRcPtr *cs)
Definition ocio_capi.cc:157
const char * OCIO_colorSpaceGetDescription(OCIO_ConstColorSpaceRcPtr *cs)
Definition ocio_capi.cc:233
void OCIO_PackedImageDescRelease(struct OCIO_PackedImageDesc *p)
Definition ocio_capi.cc:290
void OCIO_configGetDefaultLumaCoefs(OCIO_ConstConfigRcPtr *config, float *rgb)
Definition ocio_capi.cc:117