Blender  V3.3
ocio_capi.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2012 Blender Foundation. All rights reserved. */
3 
4 #ifndef __OCIO_CAPI_H__
5 #define __OCIO_CAPI_H__
6 
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10 
11 typedef struct OCIO_GPUShader OCIO_GPUShader;
12 
13 #define OCIO_DECLARE_HANDLE(name) \
14  typedef struct name##__ { \
15  int unused; \
16  } * name
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 
26 OCIO_DECLARE_HANDLE(OCIO_ConstConfigRcPtr);
27 OCIO_DECLARE_HANDLE(OCIO_ConstColorSpaceRcPtr);
28 OCIO_DECLARE_HANDLE(OCIO_ConstProcessorRcPtr);
29 OCIO_DECLARE_HANDLE(OCIO_ConstCPUProcessorRcPtr);
30 OCIO_DECLARE_HANDLE(OCIO_ConstContextRcPtr);
31 OCIO_DECLARE_HANDLE(OCIO_PackedImageDesc);
32 OCIO_DECLARE_HANDLE(OCIO_ConstLookRcPtr);
33 
34 /* Standard XYZ (D65) to linear Rec.709 transform. */
35 static 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. */
40 static 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  */
48 typedef struct OCIO_CurveMappingSettings {
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. */
59  int lut_size;
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 
100 void OCIO_init(void);
101 void OCIO_exit(void);
102 
103 OCIO_ConstConfigRcPtr *OCIO_getCurrentConfig(void);
104 void OCIO_setCurrentConfig(const OCIO_ConstConfigRcPtr *config);
105 
106 OCIO_ConstConfigRcPtr *OCIO_configCreateFromEnv(void);
107 OCIO_ConstConfigRcPtr *OCIO_configCreateFromFile(const char *filename);
108 OCIO_ConstConfigRcPtr *OCIO_configCreateFallback(void);
109 
110 void OCIO_configRelease(OCIO_ConstConfigRcPtr *config);
111 
112 int OCIO_configGetNumColorSpaces(OCIO_ConstConfigRcPtr *config);
113 const char *OCIO_configGetColorSpaceNameByIndex(OCIO_ConstConfigRcPtr *config, int index);
114 OCIO_ConstColorSpaceRcPtr *OCIO_configGetColorSpace(OCIO_ConstConfigRcPtr *config,
115  const char *name);
116 int OCIO_configGetIndexForColorSpace(OCIO_ConstConfigRcPtr *config, const char *name);
117 
118 int OCIO_colorSpaceIsInvertible(OCIO_ConstColorSpaceRcPtr *cs);
119 int OCIO_colorSpaceIsData(OCIO_ConstColorSpaceRcPtr *cs);
120 void OCIO_colorSpaceIsBuiltin(OCIO_ConstConfigRcPtr *config,
121  OCIO_ConstColorSpaceRcPtr *cs,
122  bool *is_scene_linear,
123  bool *is_srgb);
124 
125 void OCIO_colorSpaceRelease(OCIO_ConstColorSpaceRcPtr *cs);
126 
127 const char *OCIO_configGetDefaultDisplay(OCIO_ConstConfigRcPtr *config);
128 int OCIO_configGetNumDisplays(OCIO_ConstConfigRcPtr *config);
129 const char *OCIO_configGetDisplay(OCIO_ConstConfigRcPtr *config, int index);
130 const char *OCIO_configGetDefaultView(OCIO_ConstConfigRcPtr *config, const char *display);
131 int OCIO_configGetNumViews(OCIO_ConstConfigRcPtr *config, const char *display);
132 const char *OCIO_configGetView(OCIO_ConstConfigRcPtr *config, const char *display, int index);
133 const char *OCIO_configGetDisplayColorSpaceName(OCIO_ConstConfigRcPtr *config,
134  const char *display,
135  const char *view);
136 
137 void OCIO_configGetDefaultLumaCoefs(OCIO_ConstConfigRcPtr *config, float *rgb);
138 void OCIO_configGetXYZtoSceneLinear(OCIO_ConstConfigRcPtr *config,
139  float xyz_to_scene_linear[3][3]);
140 
141 int OCIO_configGetNumLooks(OCIO_ConstConfigRcPtr *config);
142 const char *OCIO_configGetLookNameByIndex(OCIO_ConstConfigRcPtr *config, int index);
143 OCIO_ConstLookRcPtr *OCIO_configGetLook(OCIO_ConstConfigRcPtr *config, const char *name);
144 
145 const char *OCIO_lookGetProcessSpace(OCIO_ConstLookRcPtr *look);
146 void OCIO_lookRelease(OCIO_ConstLookRcPtr *look);
147 
148 OCIO_ConstProcessorRcPtr *OCIO_configGetProcessorWithNames(OCIO_ConstConfigRcPtr *config,
149  const char *srcName,
150  const char *dstName);
151 void OCIO_processorRelease(OCIO_ConstProcessorRcPtr *cpu_processor);
152 
153 OCIO_ConstCPUProcessorRcPtr *OCIO_processorGetCPUProcessor(OCIO_ConstProcessorRcPtr *processor);
154 void OCIO_cpuProcessorApply(OCIO_ConstCPUProcessorRcPtr *cpu_processor, OCIO_PackedImageDesc *img);
155 void OCIO_cpuProcessorApply_predivide(OCIO_ConstCPUProcessorRcPtr *cpu_processor,
156  OCIO_PackedImageDesc *img);
157 void OCIO_cpuProcessorApplyRGB(OCIO_ConstCPUProcessorRcPtr *cpu_processor, float *pixel);
158 void OCIO_cpuProcessorApplyRGBA(OCIO_ConstCPUProcessorRcPtr *cpu_processor, float *pixel);
159 void OCIO_cpuProcessorApplyRGBA_predivide(OCIO_ConstCPUProcessorRcPtr *cpu_processor,
160  float *pixel);
161 void OCIO_cpuProcessorRelease(OCIO_ConstCPUProcessorRcPtr *processor);
162 
163 const char *OCIO_colorSpaceGetName(OCIO_ConstColorSpaceRcPtr *cs);
164 const char *OCIO_colorSpaceGetDescription(OCIO_ConstColorSpaceRcPtr *cs);
165 const char *OCIO_colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr *cs);
166 int OCIO_colorSpaceGetNumAliases(OCIO_ConstColorSpaceRcPtr *cs);
167 const char *OCIO_colorSpaceGetAlias(OCIO_ConstColorSpaceRcPtr *cs, const int index);
168 
169 OCIO_ConstProcessorRcPtr *OCIO_createDisplayProcessor(OCIO_ConstConfigRcPtr *config,
170  const char *input,
171  const char *view,
172  const char *display,
173  const char *look,
174  const float scale,
175  const float exponent,
176  const bool inverse);
177 
178 OCIO_PackedImageDesc *OCIO_createOCIO_PackedImageDesc(float *data,
179  long width,
180  long height,
181  long numChannels,
182  long chanStrideBytes,
183  long xStrideBytes,
184  long yStrideBytes);
185 
186 void OCIO_PackedImageDescRelease(OCIO_PackedImageDesc *p);
187 
188 bool OCIO_supportGPUShader(void);
189 bool OCIO_gpuDisplayShaderBind(OCIO_ConstConfigRcPtr *config,
190  const char *input,
191  const char *view,
192  const char *display,
193  const char *look,
194  OCIO_CurveMappingSettings *curve_mapping_settings,
195  const float scale,
196  const float exponent,
197  const float dither,
198  const bool use_predivide,
199  const bool use_overlay);
200 void OCIO_gpuDisplayShaderUnbind(void);
201 void OCIO_gpuCacheFree(void);
202 
203 const char *OCIO_getVersionString(void);
204 int OCIO_getVersionHex(void);
205 
206 #ifdef __cplusplus
207 }
208 #endif
209 
210 #endif /* OCIO_CAPI_H */
static AppView * view
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei height
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei width
btMatrix3x3 inverse() const
Return the inverse of the matrix.
Definition: btTransform.h:182
ccl_global KernelShaderEvalInput * input
static const pxr::TfToken rgb("rgb", pxr::TfToken::Immortal)
void OCIO_processorRelease(OCIO_ConstProcessorRcPtr *cpu_processor)
Definition: ocio_capi.cc:181
void OCIO_cpuProcessorApplyRGB(OCIO_ConstCPUProcessorRcPtr *cpu_processor, float *pixel)
Definition: ocio_capi.cc:202
void OCIO_cpuProcessorApplyRGBA(OCIO_ConstCPUProcessorRcPtr *cpu_processor, float *pixel)
Definition: ocio_capi.cc:207
const char * OCIO_configGetDefaultView(OCIO_ConstConfigRcPtr *config, const char *display)
Definition: ocio_capi.cc:94
void OCIO_cpuProcessorApplyRGBA_predivide(OCIO_ConstCPUProcessorRcPtr *cpu_processor, float *pixel)
Definition: ocio_capi.cc:212
bool OCIO_supportGPUShader(void)
Definition: ocio_capi.cc:277
static const float OCIO_XYZ_TO_REC709[3][3]
Definition: ocio_capi.h:35
void OCIO_configGetXYZtoSceneLinear(OCIO_ConstConfigRcPtr *config, float xyz_to_scene_linear[3][3])
Definition: ocio_capi.cc:121
const char * OCIO_configGetColorSpaceNameByIndex(OCIO_ConstConfigRcPtr *config, int index)
Definition: ocio_capi.cc:63
OCIO_ConstCPUProcessorRcPtr * OCIO_processorGetCPUProcessor(OCIO_ConstProcessorRcPtr *processor)
Definition: ocio_capi.cc:186
OCIO_ConstConfigRcPtr * OCIO_getCurrentConfig(void)
Definition: ocio_capi.cc:25
const char * OCIO_colorSpaceGetFamily(OCIO_ConstColorSpaceRcPtr *cs)
Definition: ocio_capi.cc:232
void OCIO_lookRelease(OCIO_ConstLookRcPtr *look)
Definition: ocio_capi.cc:146
const char * OCIO_lookGetProcessSpace(OCIO_ConstLookRcPtr *look)
Definition: ocio_capi.cc:141
void OCIO_cpuProcessorApply(OCIO_ConstCPUProcessorRcPtr *cpu_processor, OCIO_PackedImageDesc *img)
Definition: ocio_capi.cc:191
void OCIO_gpuCacheFree(void)
Definition: ocio_capi.cc:312
void OCIO_colorSpaceIsBuiltin(OCIO_ConstConfigRcPtr *config, OCIO_ConstColorSpaceRcPtr *cs, bool *is_scene_linear, bool *is_srgb)
Definition: ocio_capi.cc:161
void OCIO_colorSpaceRelease(OCIO_ConstColorSpaceRcPtr *cs)
Definition: ocio_capi.cc:169
const char * OCIO_configGetView(OCIO_ConstConfigRcPtr *config, const char *display, int index)
Definition: ocio_capi.cc:104
OCIO_PackedImageDesc * OCIO_createOCIO_PackedImageDesc(float *data, long width, long height, long numChannels, long chanStrideBytes, long xStrideBytes, long yStrideBytes)
Definition: ocio_capi.cc:260
int OCIO_colorSpaceGetNumAliases(OCIO_ConstColorSpaceRcPtr *cs)
Definition: ocio_capi.cc:237
const char * OCIO_colorSpaceGetName(OCIO_ConstColorSpaceRcPtr *cs)
Definition: ocio_capi.cc:222
void OCIO_init(void)
Definition: ocio_capi.cc:10
const char * OCIO_configGetLookNameByIndex(OCIO_ConstConfigRcPtr *config, int index)
Definition: ocio_capi.cc:131
void OCIO_cpuProcessorApply_predivide(OCIO_ConstCPUProcessorRcPtr *cpu_processor, OCIO_PackedImageDesc *img)
Definition: ocio_capi.cc:196
void OCIO_setCurrentConfig(const OCIO_ConstConfigRcPtr *config)
Definition: ocio_capi.cc:38
OCIO_ConstConfigRcPtr * OCIO_configCreateFallback(void)
Definition: ocio_capi.cc:30
int OCIO_configGetNumColorSpaces(OCIO_ConstConfigRcPtr *config)
Definition: ocio_capi.cc:58
void OCIO_gpuDisplayShaderUnbind(void)
Definition: ocio_capi.cc:307
void OCIO_configRelease(OCIO_ConstConfigRcPtr *config)
Definition: ocio_capi.cc:53
OCIO_ConstColorSpaceRcPtr * OCIO_configGetColorSpace(OCIO_ConstConfigRcPtr *config, const char *name)
Definition: ocio_capi.cc:68
int OCIO_configGetNumViews(OCIO_ConstConfigRcPtr *config, const char *display)
Definition: ocio_capi.cc:99
void OCIO_cpuProcessorRelease(OCIO_ConstCPUProcessorRcPtr *processor)
Definition: ocio_capi.cc:217
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 bool use_predivide, const bool use_overlay)
Definition: ocio_capi.cc:282
const char * OCIO_colorSpaceGetDescription(OCIO_ConstColorSpaceRcPtr *cs)
Definition: ocio_capi.cc:227
int OCIO_configGetIndexForColorSpace(OCIO_ConstConfigRcPtr *config, const char *name)
Definition: ocio_capi.cc:74
struct OCIO_CurveMappingSettings OCIO_CurveMappingSettings
OCIO_ConstProcessorRcPtr * OCIO_configGetProcessorWithNames(OCIO_ConstConfigRcPtr *config, const char *srcName, const char *dstName)
Definition: ocio_capi.cc:174
int OCIO_colorSpaceIsInvertible(OCIO_ConstColorSpaceRcPtr *cs)
Definition: ocio_capi.cc:151
void OCIO_exit(void)
Definition: ocio_capi.cc:19
OCIO_ConstConfigRcPtr * OCIO_configCreateFromEnv(void)
Definition: ocio_capi.cc:43
static const float OCIO_ACES_TO_XYZ[3][3]
Definition: ocio_capi.h:40
int OCIO_getVersionHex(void)
Definition: ocio_capi.cc:322
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 bool inverse)
Definition: ocio_capi.cc:247
#define OCIO_DECLARE_HANDLE(name)
Definition: ocio_capi.h:13
const char * OCIO_configGetDisplayColorSpaceName(OCIO_ConstConfigRcPtr *config, const char *display, const char *view)
Definition: ocio_capi.cc:109
OCIO_ConstLookRcPtr * OCIO_configGetLook(OCIO_ConstConfigRcPtr *config, const char *name)
Definition: ocio_capi.cc:136
const char * OCIO_configGetDisplay(OCIO_ConstConfigRcPtr *config, int index)
Definition: ocio_capi.cc:89
const char * OCIO_colorSpaceGetAlias(OCIO_ConstColorSpaceRcPtr *cs, const int index)
Definition: ocio_capi.cc:242
int OCIO_configGetNumLooks(OCIO_ConstConfigRcPtr *config)
Definition: ocio_capi.cc:126
const char * OCIO_configGetDefaultDisplay(OCIO_ConstConfigRcPtr *config)
Definition: ocio_capi.cc:79
void OCIO_PackedImageDescRelease(OCIO_PackedImageDesc *p)
Definition: ocio_capi.cc:272
const char * OCIO_getVersionString(void)
Definition: ocio_capi.cc:317
OCIO_ConstConfigRcPtr * OCIO_configCreateFromFile(const char *filename)
Definition: ocio_capi.cc:48
int OCIO_configGetNumDisplays(OCIO_ConstConfigRcPtr *config)
Definition: ocio_capi.cc:84
int OCIO_colorSpaceIsData(OCIO_ConstColorSpaceRcPtr *cs)
Definition: ocio_capi.cc:156
void OCIO_configGetDefaultLumaCoefs(OCIO_ConstConfigRcPtr *config, float *rgb)
Definition: ocio_capi.cc:116